PythonでOpenSSLを使いたいってことで,pyOpenSSLをWindows10に設定しました。pyOpenSSLのロードに成功したので,次はPKCS#12ファイルをデコードしてみました。pyOpenSSLって慣れると簡単かも。
概要
pyOpenSSLでPKCS#12ファイルをデコードすると,pkcs12オブジェクトが生成されます。そのpkcs12オブジェクトを利用して,いろいろな処理を行っていきます。今回は,証明書を取り出して表示してみました。
サンプルソース
サンプルはこちらです。PKCS#12ファイルを読み込んで,パスワードを指定してデコードします。すると,pkcs12オブジェクトができるので,必要なコンポーネント(証明書や鍵など)を取り出します。
# -*- coding: utf-8 -*- # pkcs#12ファイルをデコードする import OpenSSL # 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() pkey = p12.get_privatekey() # 証明書をPEM形式に変換する(画面に出力するため) pemCert = OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, userCert) # デコードしたオブジェクトを表示する print('FriendlyName: %s' % friendlyName.decode('ascii')) print('Certificate: %s' % pemCert.decode('ascii'))
実行結果
実行結果を見ると,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-----