잊지 않겠습니다.

'2017/07/13'에 해당되는 글 1건

  1. 2017.07.13 PKI 시스템 1

PKI 시스템

Java 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.pemserver.public.pemca.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


Posted by Y2K
,