pyOpenSSLでPKCS#12ファイルをデコードする(その2)
概要
pyOpenSSLの機能を利用してPKCS#12ファイルをデコードしてみます。
その1では証明書のフレンドリー名とユーザ証明書を取り出して表示させてみました。今回は,公開鍵も取り出して表示させます。
サンプルプログラム
適当なPKCS#12ファイルを使ったサンプルです。
PKCS#12ファイルを読み込んで,パスワードを指定してデコードします。そのあとに,デコードしたpkcs12オブジェクトからさまざまな属性を取り出して表示させます。
# -*- coding: utf-8 -*-
# PKCS#12ファイルをデコードする(その2)
# 証明書のコンポーネントを表示する
import OpenSSL
import binascii
# PKCS#12ファイルをオープンする
p12_input = open('user2.p12', 'rb')
try:
buffer = p12_input.read()
finally:
p12_input.close()
# PKCS#12ファイルをデコードする
p12 = OpenSSL.crypto.load_pkcs12(buffer, '1111')
# 証明書のコンポーネントを取得する
caCert = p12.get_ca_certificates()
userCert = p12.get_certificate()
friendlyName = p12.get_friendlyname()
priKey = p12.get_privatekey()
# 証明書(X509)オブジェクトから属性を取得する
issuer = userCert.get_issuer()
pubKey = userCert.get_pubkey()
serial = userCert.get_serial_number()
subject = userCert.get_subject()
# 証明書をPEM形式に変換する(画面に出力するため)
pemCert = OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, userCert)
pemCaCert = OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, caCert[0])
# 公開鍵はDER形式で表示させる。
derPKey = OpenSSL.crypto.dump_publickey(OpenSSL.crypto.FILETYPE_ASN1, pubKey)
# デコードしたオブジェクトを表示する
print('FriendlyName: %s' % friendlyName.decode('ascii'))
print('Certificate: ')
print(pemCert.decode('ascii'))
print('Serial Number: %s' % serial)
print('Subject : %s' % subject)
print('Issuer : %s' % issuer)
print('Public Key : %s' % binascii.hexlify(derPKey))
print('CA Certificate: ')
print(pemCaCert.decode('ascii'))
実行結果
実行結果は次の通り。
証明書の各種属性が出力されています。
FriendlyName: My Certificate
Certificate:
-----BEGIN CERTIFICATE-----
MIIEETCCAvmgAwIBAgIJAMOwrMuZm9jcMA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNV
BAYTAkpQMQ4wDAYDVQQIDAVUb2t5bzEXMBUGA1UECgwOVHJ1c3RlZCBEZXNpZ24x
DTALBgNVBAsMBG15Q0ExDTALBgNVBAMMBG15Q0ExJzAlBgkqhkiG9w0BCQEWGGFk
bWluQHRydXN0ZWQtZGVzaWduLm5ldDAeFw0xNjA0MDMyMDQ1MzNaFw0xNzA0MDMy
MDQ1MzNaMIGVMQswCQYDVQQGEwJKUDEOMAwGA1UECAwFVG9reW8xEDAOBgNVBAcM
B0Vkb2dhd2ExFzAVBgNVBAoMDlRydXN0ZWQgRGVzaWduMRIwEAYDVQQLDAlDZXJ0
VXNlcnMxDjAMBgNVBAMMBXVzZXIyMScwJQYJKoZIhvcNAQkBFhh1c2VyMkB0cnVz
dGVkLWRlc2lnbi5uZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDU
0+1E3pHGhCAHl2rWFKlC/QTFUnuxANx8tDzBEKkQNJLXTpEIjNbk3h0BAFBZuMhv
cLRM62L0nJffUZgk2KRs1/SG01nZZCWBsLD9zkKy/bGm3+CoxdGPt72kI8AZuhwD
SAOfYKXl9eTzPUMmK4KoVulZsOO/7bo5q+VEC1u2tCStqyqE4sIl8heM2+ILDyod
Dyc+6zTSE7KBYQG5eK9HS7Sk6FbVIbtufCrTVf1i5TrvNEVZUOLU7D6qyJgazLNu
lnadsatvAQdLw83Sr42P15DEJqj64iqTbIHDRTZ51Fu5L6MKHmxEj7ghj7QrEFNV
e6Roa/j4IyfYIuQHgRqvAgMBAAGjezB5MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgEN
BB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBR8JlVM
MvPkAZMjsWhFCfso4x7ZljAfBgNVHSMEGDAWgBTQWWWXkIzaouxfeZRMr16U+8Gy
IzANBgkqhkiG9w0BAQsFAAOCAQEAOZyBboiK154gYVuZBzm495SXWfy1qx0soRGE
DaKbj8bKZYFjtw9UnKiCCqBMGR/pdYAl/qxzJj/+VlN8ZqM9bw9fyZ17l5iw3sgz
H/cY0MrveVrysOCIvDBf2+JfElX4xTPfx1gUWOJifakdie9nrcukbsTYKidBoUSq
0Vo4veEMMSIQLIhv7+YNHG8Sj5oRYaO6RHnkTe9vfP5n0l6PvOWiK8RffG3rBtuz
gjko/y1oyo9unji1aycAG652On0DXKK/5YdOQjd+uOrIbUlvW1cFLfGYmehBmqBN
Y+moe6vvbFb+4DNvtLPlX6H9cL6rNr1VU6aMjGX7gjyLy6bt8g==
-----END CERTIFICATE-----
Serial Number: 14100960423752489180
Subject :
Issuer :
Public Key : b'30820122300d06092a864886f70d01010105000382010f003082010a0282010100d4d3ed44de91c6842007976ad614a942fd04c5527bb100dc7cb43cc110a9103492d74e91088cd6e4de1d01005059b8c86f70b44ceb62f49c97df519824d8a46cd7f486d359d9642581b0b0fdce42b2fdb1a6dfe0a8c5d18fb7bda423c019ba1c0348039f60a5e5f5e4f33d43262b82a856e959b0e3bfedba39abe5440b5bb6b424adab2a84e2c225f2178cdbe20b0f2a1d0f273eeb34d213b2816101b978af474bb4a4e856d521bb6e7c2ad355fd62e53aef34455950e2d4ec3eaac8981accb36e96769db1ab6f01074bc3cdd2af8d8fd790c426a8fae22a936c81c3453679d45bb92fa30a1e6c448fb8218fb42b1053557ba4686bf8f82327d822e407811aaf0203010001'
CA Certificate:
-----BEGIN CERTIFICATE-----
MIID4DCCAsigAwIBAgIJAMOwrMuZm9jaMA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNV
BAYTAkpQMQ4wDAYDVQQIDAVUb2t5bzEXMBUGA1UECgwOVHJ1c3RlZCBEZXNpZ24x
DTALBgNVBAsMBG15Q0ExDTALBgNVBAMMBG15Q0ExJzAlBgkqhkiG9w0BCQEWGGFk
bWluQHRydXN0ZWQtZGVzaWduLm5ldDAeFw0xNjAzMTkwMDQ4MjNaFw0xOTAzMTkw
MDQ4MjNaMH0xCzAJBgNVBAYTAkpQMQ4wDAYDVQQIDAVUb2t5bzEXMBUGA1UECgwO
VHJ1c3RlZCBEZXNpZ24xDTALBgNVBAsMBG15Q0ExDTALBgNVBAMMBG15Q0ExJzAl
BgkqhkiG9w0BCQEWGGFkbWluQHRydXN0ZWQtZGVzaWduLm5ldDCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAKvct/aHKhyp4fMPNWbenGAvdZK3Uk2QIPiC
0ZQQX6M97khuP7btkh/1dxbbXrIVzKrtxBGUxuYsieXthfvzeGCpWkrj92Np5Xic
Qhb3E5bGo8ofii1qabuT2BF1bSuPlYWFxiCfP1Xlv5qrN2CnOVb6HXaPnti23uhw
ksMqK8VW3e1FBLJwUuKOFkYRRnR8mGfnvihSr0TuAp6uo4GqD7JBC1SlHTtvqw9L
Yg9fHygd67BMKW93b+ksOqrAqmOh03PjDG+1Me10zEimdOTlG+MAb4JKw3ODy7R4
hY4nM/5SZeRzGKfak/kBsmuRZ9WxstACLv7A47H5jEHEvHhQppECAwEAAaNjMGEw
HQYDVR0OBBYEFNBZZZeQjNqi7F95lEyvXpT7wbIjMB8GA1UdIwQYMBaAFNBZZZeQ
jNqi7F95lEyvXpT7wbIjMAwGA1UdEwQFMAMBAf8wEQYJYIZIAYb4QgEBBAQDAgEG
MA0GCSqGSIb3DQEBCwUAA4IBAQAv/IZcIiq6yd4H4Q2+Eipvic5At6iawH2Gyfxy
9zzZLe0dZyn+Zf18ti9jBuFP4vQxKDYYKgHAXa0Xwofffv9M/1TuWuLw1NFeos99
p5345zolzsfumglXqGKOlu54cRqYkuEAWYSrKe9HInqQbPPh+VMWKISGLXtb22gB
xnsbzctGjwU5/LHeH1jM/EC/Odw9ydrHMz7+quVRdlp0bi+jNIYVnyNAs525rHlR
ccdS31HVWZxpPkjDX5SvNiRwMangCtXtIrk3MkT+NEmd8M0+B5YQUw8aF1r9dSB9
05PiLgD6gbCUnbJ/iHvo/jEcQOHVbJ9vYoRSoZZo1KGmZL21
-----END CERTIFICATE-----