Java
PKI 시스템
Y2K
2017. 7. 13. 10:12
PKI
PKI에 대해서 정리할 필요성이 있어서 정리하게 되었습니다.
이론
- RFC 2459에 정의 (Internet X.509 Public Key Infrastructure)
- 암호화와 복호화를 위해 서로 다른 키를 사용하는 방식(비대칭 암호화방식)에서 사용되는 key 기반
- 암호화를 위해 사용되는 Key:
Public Key
- 복호화를 위해 사용되는 Key:
Private Key
Message Digest
- 메세지 축약(message digest) - MD5(128bit), SHA1(160bit), SHA256
- 아무리 긴 내용이라도 축약시키는 것이 가능
Symmetric Key Algorithm
- OneKey - Symmetric Key를 이용해서 Encrypt와 Decrypt를 진행
- 속도가 빠르다.
- 3DES, AES
Asymmetric Key Algorithm
Two Key (PrivateKey, PublicKey)
리만가설에 근거
RSA
공개키 암호화/복호화
PlainText --(Public Key)--> EncryptedText
EncryptedText --(Private Key)--> PlainText
- 서명/확인 (Sign/Verify)
PlainText --(Private Key)--> SignedValue
SignedValue --(Public Key)--> PlainText
PKI
- Asymmetric Key Algorithm
- Private Key, Public Key를 이용
- Private Key는 충분히 보호받고, 외부에 노출되지 않는 상황
- Public Key는 항시 노출이 가능한 상황
- PrivateKey를 가진 상대방만 볼 수 있는 내용을 전달하고 싶은 경우에는 암호화/복호화(Encrypt/Decrypt)
- PrivateKey를 가진 사람이 보낸 내용임을 확인하기 위한 방법이 서명/확인(Sign/Verify)
OpenSSL
OpenSource로 PKI를 지원
Private Key/Public Key 생성
#private key 생성
openssl genrsa -out server.private.pem 2048
#(option) private key를 사용할 때 필요한 암호 제거
openssl rsa -in server.private.pem -out server.private.pem
#private key와 쌍이 되는 public key 생성
openssl rsa -in server.private.pem -pubout -out server.public.pem
Key 파일 형식
- pem(Privacy Enhanced Mail): byte data를 Base64 HEX String으로 변경시켜서 가독성이 있도록 만든 Format
- der(Distinguished Encoding Rules): byte data. Browser에서 사용되는 기본 형식
#DER -> PEM (private key)
openssl rsa -inform DER -outform PEM -in server.private.der -out server.private.pem
#PEM -> DER (private key)
openssl rsa -inform PEM -outform DER -in server.private.pem -out server.private.der
#DER -> PEM (public key)
openssl rsa -inform DER -outform PEM -pubin -in server.public.der -out server.public.pem
#PEM -> DER (public key)
openssl rsa -inform PEM -outform DER -pubin -in server.public.pem -out server.public.der
서버인증서
HTTPS를 지원하기 위해서는 서버에 대한 인증서를 요청해야지 됩니다. 인증된 기간이 요청서를 인증을 하게 되면 그것이 인증서가 됩니다.
1.요청서 작성
#요청서 작성
openssl req -new -days 500 -key server.private.pem -out server.csr
2.요청서를 CA가 서명
#요청서를 CA가 서명
openssl x509 -req -days 500 -in server.csr -signkey ca.private.pem -out server.crt
3.(option) PFX 파일
comodo등에서는 pfx파일이 주로 사용됩니다. pfx
는 crt
와 server.private.pem
, server.public.pem
, ca.public.pem
이 결합되어 있는 형태입니다.
PFX = 요청서 + 서버PrivateKey + 서버PublicKey + CaPublicKey
#CA 개인키와 요청서와 서버 요청서 결합 (password 연결)
openssl pkcs12 -export -in server.crt -inkey ca.private.pem -out server.pfx
#PFX 파일에서 server의 private key 추출
openssl pkcs12 -in server.pfx -nocerts -nodes -out server.private.pem
#PFX 파일에서 server 요청서 추출
openssl pkcs12 -in server.pfx -clcerts -nokeys -out server.crt
4.(option) JKS(java key store)
JKS 파일은 pfx를 통해서 얻어낼 수 있으며, server.private.pem
과 server.public.pem
을 모두 얻어낼 수 있습니다. java의 keytool
을 이용합니다.
keytool -importkeystore -srckeystore server.pfx -srcstoretype pkcs12 -destkeystore server.jks -deststoretype jks