PFX인증서에서 인증서 및 개인키 추출
PKCS#12
PKCS#12(Public Key Cryptography Standards #12)형식은 각종 키, 인증서가 모두 포함될 수 있는 형태이다. 해당 형식을 사용하면, 바이너리 형태로 저장되며, 이 파일을 PFX 파일이라고도 한다.
- openssl 툴이 설치되어 있어야 함
- pfx파일에 CA인증서는 포함되어 있지 않을 수 있음
- 인증서 파일이 암호화 되어 있을 경우, 암호키를 입력해 주어야 함
- 사용 예시에서 확장자를 포함한 파일이름은 본인 설정에 맞게 자유롭게
추출
- 인증서 추출
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys -out <clientcert.crt> --password pass:<password>
- 개인키 추출
openssl pkcs12 -in <filename.pfx> -nocerts -nodes -out <clientcert.key> --password pass:<password>
- CA인증서 추출
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain -out <cacerts.crt> --password pass:<password>
- 사용 예시
openssl pkcs12 -in my.pfx -nocerts -nodes -out my.key --password pass:a1234
openssl pkcs12 -in my.pfx -clcerts -nokeys -out my.crt --password pass:a1234
openssl pkcs12 -in my.pfx -cacerts -nokeys -chain -out ca_my.pem --password pass:a1234
주의사항
추출된 파일을 바로 시스템에 적용하여 사용하면 형식이 맞지 않아서 에러가 날 수 있으니, 적절하게 필요한 부분만 떼서 사용해야 한다.
- 추출 직후의 파일 포맷
아래 예시에 사용된 예시는 임의 변경한 사용 불가능한 인증서이니, 괜히 헛수고 하지 않길 바란다.
Bag Attributes
Microsoft Local Key set: <No Values>
localKeyID: 01 00 00 00
friendlyName: le-e9a1231-7f1c-1234-b123-f1233da2
Microsoft CSP Name: Microsoft RSA SChannel Cryptographic Provider
Key Attributes
X509v3 Key Usage: 10
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDKntycKiujZNnY
5BgQ/ZEdec4uxFQ0lLK7CxHo1gHJLvqm660cuFZVJBtP6BPSHtAczqYGAiWQOESt
hnIjURqPxSFrMgUahK06+f2bCjIE844FP49NxMHh88VJMnwLz9RhvI5sOsXuG68q
Gj9DnB+3wuxNuIo44UhVthcGO4QmgBWAEuHCiq4b2Q14rLkcQM11r3xkQFzq08Z+
qPvYDs01BM537uU/RCoDhZMt5V6FHiBsZMy6bT+jDzhSKRVxSdoibwPo9WOAVvzx
KdmmxI58TuY8Tf6AUH7FCzd2GTl6T2rqTa9ZE9RGGUq3PTpX3xJ6HZgpXHCODJHp
81jn0aDdAgMBAAECggEACHHpmPqq+fLsn30WQbMH1tYqUUmuhsiB0IjsFKvCxEtY
eBePjghi1Mad+s0d8l6FZwX35n01apblyeO2IyGwvThGpcyeaNYJ0FD2EH2yywEJ
tM9K3j9qo0vBN8VKZUWiwPYWa41hjYSK3vLcGynJKqQNrEmaPTeqh6QAvqpBXkda
YMV0XsccZg0iVbiq7jP9lDhZMt5V6FHZjfnDza/eQlqIXFiYFVnJSOeCOe930A4I
xC0UPVKVwPL2Ux1ngDtiKYHA++DKKy9VgEVCjeCOA8197ce4rgkLyidECstyG0qC
ahhdNjBlvk8DiZuH5srUxECzEUi4w5dlWBhqyfcTIwKBgQDe98MXq1e/mM3sdpTz
XnRSjTPANuCaC9xGtkh6S+vQqB39duruk/n1lYom+dNIqmagP7MOgHoD7nbtfLHJ
3BqNCnT+qGzxwSxMcFwab7Yexgedj1efEaWsQrmMh6IdDCLPEfimaplk2PGSZwwd
quncv0DB6Yg3nQK2mjKaVY2dpwKBgQDoo2mwq5vKFf7csuXl/mFUgm1zPd2maXaA
4Hr0yEoqx/cylE2KnQ5x3TvSboFC3iLbCPAhYRidyhLZ0cK//4gKqsACvTI3t3OG
hhMSAUwFff+Eub3E0JXAWvNpmh39wuM0peJKiBPREJTHfBgKaqDO6OIOJ9snPufv
gmKEtZyF2wKBgCvAemvel21lUqMf8cJ/uluokYsaOaCAy0yk4Dv/QdrD4n6mIxuF
tfrWyTE0vJz5swGm/j/OPiMfW/7mBQ0TP7KFZsfBzP7zZPnq4mfdm+MWANCOHCd+
kv/mZ/qHcuw4QWxYnm4pZMhBqmagP+f3zcQfU1m5tZ0UFkA2qc9XEl7pAoGAIlyA
r+epCyBUlKSX8HCyT5k0MWFh68KIDmEZyC4NRmRizsW47lBkYc0bmOlZjlbhLxkS
3ttIl4XRYvromRNVNL4jvkPTtwcRuTz0dCRc5jLGGwSUUw28EL1eVqq840514MDf
u8J9qtOYJh7eLiuxtN4RBaY9aH6SI35OrutkQyECgYEAkCLH4lsbwWCnI4sip+Rj
AeACACMEUHvl4XRYvromRNVNL4jvkPTtwcRuTz0d1k2GwSUUw28EL1/+a2J1S7gr
8jKRIG3X0QuGq/f1lwrZZPSVEYTsTN3fe9/YhDMeC+/VRhIar58QB6JTYlxWyP7o
AiNfeiGazzMTMmO79XaTuHI=
-----END PRIVATE KEY-----
- 필요한 부분
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDKntycKiujZNnY
5BgQ/ZEdec4uxFQ0lLK7CxHo1gHJLvqm660cuFZVJBtP6BPSHtAczqYGAiWQOESt
hnIjURqPxSFrMgUahK06+f2bCjIE844FP49NxMHh88VJMnwLz9RhvI5sOsXuG68q
Gj9DnB+3wuxNuIo44UhVthcGO4QmgBWAEuHCiq4b2Q14rLkcQM11r3xkQFzq08Z+
qPvYDs01BM537uU/RCoDhZMt5V6FHiBsZMy6bT+jDzhSKRVxSdoibwPo9WOAVvzx
KdmmxI58TuY8Tf6AUH7FCzd2GTl6T2rqTa9ZE9RGGUq3PTpX3xJ6HZgpXHCODJHp
81jn0aDdAgMBAAECggEACHHpmPqq+fLsn30WQbMH1tYqUUmuhsiB0IjsFKvCxEtY
eBePjghi1Mad+s0d8l6FZwX35n01apblyeO2IyGwvThGpcyeaNYJ0FD2EH2yywEJ
tM9K3j9qo0vBN8VKZUWiwPYWa41hjYSK3vLcGynJKqQNrEmaPTeqh6QAvqpBXkda
YMV0XsccZg0iVbiq7jP9lDhZMt5V6FHZjfnDza/eQlqIXFiYFVnJSOeCOe930A4I
xC0UPVKVwPL2Ux1ngDtiKYHA++DKKy9VgEVCjeCOA8197ce4rgkLyidECstyG0qC
ahhdNjBlvk8DiZuH5srUxECzEUi4w5dlWBhqyfcTIwKBgQDe98MXq1e/mM3sdpTz
XnRSjTPANuCaC9xGtkh6S+vQqB39duruk/n1lYom+dNIqmagP7MOgHoD7nbtfLHJ
3BqNCnT+qGzxwSxMcFwab7Yexgedj1efEaWsQrmMh6IdDCLPEfimaplk2PGSZwwd
quncv0DB6Yg3nQK2mjKaVY2dpwKBgQDoo2mwq5vKFf7csuXl/mFUgm1zPd2maXaA
4Hr0yEoqx/cylE2KnQ5x3TvSboFC3iLbCPAhYRidyhLZ0cK//4gKqsACvTI3t3OG
hhMSAUwFff+Eub3E0JXAWvNpmh39wuM0peJKiBPREJTHfBgKaqDO6OIOJ9snPufv
gmKEtZyF2wKBgCvAemvel21lUqMf8cJ/uluokYsaOaCAy0yk4Dv/QdrD4n6mIxuF
tfrWyTE0vJz5swGm/j/OPiMfW/7mBQ0TP7KFZsfBzP7zZPnq4mfdm+MWANCOHCd+
kv/mZ/qHcuw4QWxYnm4pZMhBqmagP+f3zcQfU1m5tZ0UFkA2qc9XEl7pAoGAIlyA
r+epCyBUlKSX8HCyT5k0MWFh68KIDmEZyC4NRmRizsW47lBkYc0bmOlZjlbhLxkS
3ttIl4XRYvromRNVNL4jvkPTtwcRuTz0dCRc5jLGGwSUUw28EL1eVqq840514MDf
u8J9qtOYJh7eLiuxtN4RBaY9aH6SI35OrutkQyECgYEAkCLH4lsbwWCnI4sip+Rj
AeACACMEUHvl4XRYvromRNVNL4jvkPTtwcRuTz0d1k2GwSUUw28EL1/+a2J1S7gr
8jKRIG3X0QuGq/f1lwrZZPSVEYTsTN3fe9/YhDMeC+/VRhIar58QB6JTYlxWyP7o
AiNfeiGazzMTMmO79XaTuHI=
-----END PRIVATE KEY-----
끝.
반응형