OpenSSL 로 개인 키(Private Key) 비밀 구절(Pass Phrase) 해독 및 암호화
TL;DR
보안에 취약할수 있지만 어쩔수 없이 개인키를 암호(pass phrase)없이 사용해야 하는 경우가 종종 있습니다.
예로 비용때문에 AWS CloudFront 나 Load Balancer 를 사용하지 않고 직접 EC2 나 On-Premise 서버에서 웹 서버를 설치하고 SSL/TLS 를 설정할 경우 개인키 암호가 있으면 웹 서버 재구동시마다 입력이 필요하므로 서버 리부팅등시 문제가 됩니다.
이럴 경우 다음 openssl 명령어로 개인키를 해독해서 저장하면 pass phrase 입력없이 개인키를 사용할 수 있습니다.
Pass phrase 해독
/etc/pki/tls/private/examplelocalhost.key.enc 라는 암호화된 개인키가 있을 경우 다음 openssl 명령어로 해독할 수 있습니다.
$ openssl rsa -in /etc/pki/tls/private/example.com.key.enc -out /etc/pki/tls/private/example.com.key Enter pass phrase for /etc/pki/tls/private/example.com.key.enc:
Enter pass phrase 에 개인키에 설정한 암호를 입력해 주면 -out 에 지정한 경로에 복호화된 개인키가 저장됩니다.
보안때문에 권장하지는 않지만 -passin pass:mypwd 옵션으로 명령행에서 바로 pass phrase 를 입력할 수 있습니다. 다음은 pass phrase 가 secret123 인 개인키를 해독해서 저장하는 명령입니다.
$ openssl rsa -in /etc/pki/tls/private/example.com.key.enc -out /etc/pki/tls/private/example.com.key -passin pass:secret123
사전에 copy 명령어로 개인키 백업을 권장합니다.
Pass phrase 설정
반대로 다음 openssl 명령어로 AES 256 으로 개인키 파일인 example.com.key 를 암호화해서 example.com.key.enc 로 저장할 수 있습니다.
openssl rsa -aes256 -in example.com.key -out example.com.key.enc
Pass phrase 설정 여부 확인
개인키가 암호화되었는지 여부는 간단하게 사용하는 에디터로 개인키 파일을 열고 다음과 같이 Proc-Type 구문이 앞에 있는지 확인하면 됩니다.
-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: AES-256-CBC,9BF3ACA724D1187B19BDDB1585687E8A
- Proc-Type: 개인키가 암호화 되었음을 나타냅니다.
- DEK-Info: 암호화 알고리즘을 표시하며 AES 방식의 256 bit key 를 사용하며 CBC 운영 모드를 사용합니다.
암호화되지 않은 개인키를 바로 아래와 같은 구문으로 시작되므로 구분할 수 있습니다.
-----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEAtHyN+f/vS6mb
Pass phrase 란?
일반적으로 어떤 시스템이나 자원에 접근하기 위한 패스워드(password) 를 비밀번호로 번역합니다. 숫자만 암호로 사용했던 예전에는 맞지만 알파벳과 특수문자를 조합할 수 있는 지금은 비밀번호보다는 pass phrase 라는 단어가 더 정확합니다.