-
[spring][java][bouncycastle] 인증서 발급하기금융프로젝트 2022. 10. 20. 15:16
SSL
Secure Socket Layer 은 서버와 클라이언트 사이에 암호화된 링크를 구성하기 위한 표준 보안 기술이다. 일반적으로 웹 서버와 브라우저, 또는 메일 서버와 메일 클라이언트 간에 설정됩니다.
SSL은 신용카드번호, 주민등록번호, 로그인 자격 증명과 같이 민감한 정보를 안전하게 전송할 수 있도록 한다. 일반적으로 브라우저와 웹 서버 사이에 전송되는 데이터는 일반 텍스트로 전송되기 때문에 여전히 도청에 취약하다. 브라우저와 웹 서버 사이에 전송되는 모든 데이터를 공격자가 가로챌 수 있다면 공격자는 그러한 정보를 확인하고 악용할 수 있다.
모든 브라우저는 SSL 프로토콜을 사용해 보안 웹 서버와 상호작용할 수 있는 기능이 있다. 그러나 브라우저와 서버는 보안 연결을 수립하기 위해 SSL 인증서라는 것이 필요하다.
SSL인증서
브라우저가 SSL로 보호된 웹사이트에 접속하려 할 때 브라우저와 웹 서버는 “SSL 핸드셰이크”라는 프로세스를 사용해 연결을 수립한다.
SSL연결을 설정하는 데에는 공개키, 개인키, 세션키라는 세가지 키가 사용된다. 공개 키로 암호화된 모든 데이터는 개인 키로만 해독할 수 있고, 반대도 마찬가지다. 공개키 개인키로 암호화 및 복호화를 진행하고 세션키를 생성하여 보안 연결이 설정된 후에는 세션키가 사용된다.
인증서 발급하기
- bouncycastle 라이브러리 설치
org.bouncycastle bcprov-jdk16 1.38
- Cert.java
public static void makeCert() throws CertificateException, IOException, InvalidKeyException, IllegalStateException, NoSuchAlgorithmException, SignatureException { System.out.println("cert"); genCert(genKey()); }
- Cert.java - genKey 개인키를 만드는 method
public static KeyPair genKey() throws FileNotFoundException, IOException, NoSuchAlgorithmException { ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("C:\\\\cert\\\\temisone.key")); KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(1024); KeyPair mKeyPair = kpg.genKeyPair(); os.writeObject(mKeyPair); os.close(); return mKeyPair; }
- Cert.java - genCert 인증서를 만드는 method
public static void genCert(KeyPair inpKpair) throws CertificateEncodingException, IOException, InvalidKeyException, IllegalStateException, NoSuchAlgorithmException, SignatureException { X509V3CertificateGenerator v3CertGen = new X509V3CertificateGenerator(); v3CertGen.setSerialNumber(new BigInteger("1234")); v3CertGen.setIssuerDN(new X509Principal("CN=temisone, OU=temisone, O=Company, L=Seoul, C=KR")); v3CertGen.setNotBefore(new Date()); v3CertGen.setNotAfter(new Date(System.currentTimeMillis()+1000L*60*60*24*365*10)); v3CertGen.setSubjectDN(new X509Principal("CN=temisone, OU=temisone, O=Company, L=Seoul, C=KR")); v3CertGen.setPublicKey(inpKpair.getPublic()); v3CertGen.setSignatureAlgorithm("SHA1withRSA"); X509Certificate pKCertificate = v3CertGen.generate(inpKpair.getPrivate()); FileOutputStream fos = new FileOutputStream("C:\\\\cert\\\\temisone.crt"); fos.write(pKCertificate.getEncoded()); fos.close(); }
이렇게 하면 crt, key 확장자의 인증서 발급은 끝난다.
하지만 인증서에 정보를 담고 인증서를 통해 검증하는 방법은 더 찾아봐야겠다.
'금융프로젝트' 카테고리의 다른 글
[react][슬라이드] 3초마다 화면이 변경되는 슬라이드 구현 (0) 2022.10.27 [react][spring]로그인 페이지 (0) 2022.10.25 [spring][react][SSL] 인증서 발급하기 (0) 2022.10.24 [spring][https][security][jks] 스프링 프로젝트 https로 만들기 (0) 2022.10.19 [spring][myBatis][RDS][mariaDB] 프로젝트 초기 세팅 (0) 2022.10.19