〜 卓越した品質へ 〜

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'

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.