PKCS#12ファイルをpyOpenSSLを利用してデコードします。
概要
pyOpenSSLでPKCS#12ファイルをデコードすると,pkcs12オブジェクトが生成されます。そのpkcs12オブジェクトを利用して,いろいろな処理を行っていきます。今回は,証明書,公開鍵などを取り出して表示してみました。
サンプルソース
サンプルはこちらです。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) pemPKey = OpenSSL.crypto.dump_publickey(OpenSSL.crypto.FILETYPE_ASN1, pubKey) # デコードしたオブジェクトを表示する print('FriendlyName: %s' % friendlyName.decode('ascii')) print('Certificate: %s' % pemCert.decode('ascii')) print('Serial Number: %s' % serial) print('Subject : %s' % subject) print('Issuer : %s' % issuer) print('Public Key : %s' % binascii.hexlify(pemPKey))
実行結果
実行結果を見ると,PKCS#12ファイルがデコードされて,各コンポーネントを取り出すことができていることが分かります。
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 : <X509Name object '/C=JP/ST=Tokyo/L=Edogawa/O=Trusted Design/OU=CertUsers/CN=user2/emailAddress=user2@trusted-design.net'> Issuer : <X509Name object '/C=JP/ST=Tokyo/O=Trusted Design/OU=myCA/CN=myCA/emailAddress=admin@trusted-design.net'> Public Key : b'30820122300d06092a864886f70d01010105000382010f003082010a0282010100d4d3ed44de91c6842007976ad614a942fd04c5527bb100dc7cb43cc110a9103492d74e91088cd6e4de1d01005059b8c86f70b44ceb62f49c97df519824d8a46cd7f486d359d9642581b0b0fdce42b2fdb1a6dfe0a8c5d18fb7bda423c019ba1c0348039f60a5e5f5e4f33d43262b82a856e959b0e3bfedba39abe5440b5bb6b424adab2a84e2c225f2178cdbe20b0f2a1d0f273eeb34d213b2816101b978af474bb4a4e856d521bb6e7c2ad355fd62e53aef34455950e2d4ec3eaac8981accb36e96769db1ab6f01074bc3cdd2af8d8fd790c426a8fae22a936c81c3453679d45bb92fa30a1e6c448fb8218fb42b1053557ba4686bf8f82327d822e407811aaf0203010001'