NSS Security Tool と openssl を無理やり連携させて pkcs12 を開く
本当に誰得という話なんだが
やってることについて一行ずつ解説する。
最初にディレクトリを空にする。以降、certutilとpk12utilはこのディレクトリ上に勝手に出来る cert8.db, key3.db, secmod.db を利用して証明書と秘密鍵を操作するため、一旦消してステートをなくす。
次にパスワードとノイズの作成を /dev/urandom を使いながらやる。noise としてはイマイチなことになっているが、ご愛嬌。この変なコマンドライン行はSimpleSAMLphpのconfig.phpでsaltを設定する項目のコメント部分に記載してあるものを丸々使ってる。
certutil -N -d . -f pass は「新しいデータベースを作れ。ディレクトリは .、パスワードの入力をユーザとインタラクティブにやらずにパスワードファイルとして pass を使え」
次は「新しい鍵ペアを作れ。RSAを持ちいること。データベース内のニックネームは testcert、証明書オーナーは cn=test2,o=example,c=jp、 認証属性は trusted peer。 独立したCAに頼らない (自己署名)。パスワードは pass ファイル、ノイズはユーザに頼まないで noise ファイルを使え」
次は「現在のディレクトリにある cert8.db, key3db, secmod.db から testcert というニックネームの鍵ペアを抽出してPKCS12フォーマットで test.p12 にエクスポートしろ。 このスロット (PKCS11 の用語。今回はさっき作ったデータベースそのもの) のパスワードは pass から取り、エクスポートするpkcs12ファイルにはパスワードは設定しない」
OpenSSLのコマンドラインによってpkcs12 ファイルの中身が出てくる。
「Bad Attributes」に見えるが「Bag Attributes」。bagはpkcs12 の用語。
BEGINとENDに囲われている部分がそれぞれ秘密鍵と証明書。実用に堪えるものではないが。
それらを読みたければエディタでコピって
などとやれば良い。
> rm -rf * > tr -c -d '0123456789abcdefghijklmnopqrstuvwxyz' </dev/urandom | dd bs=32 count=1 2>/dev/null > pass > tr -c -d '0123456789abcdefghijklmnopqrstuvwxyz' </dev/urandom | dd bs=1024 count=1 2> /dev/null > noise > certutil -N -d . -f pass > certutil -S -k rsa -n testcert -s "cn=test,o=example,c=jp" -t P -x -f pass -d . -z noise > pk12util -o test.p12 -n testcert -d . -k pass -W "" &>/dev/null > openssl pkcs12 -in test.p12 -nodes -passin pass:
やってることについて一行ずつ解説する。
最初にディレクトリを空にする。以降、certutilとpk12utilはこのディレクトリ上に勝手に出来る cert8.db, key3.db, secmod.db を利用して証明書と秘密鍵を操作するため、一旦消してステートをなくす。
次にパスワードとノイズの作成を /dev/urandom を使いながらやる。noise としてはイマイチなことになっているが、ご愛嬌。この変なコマンドライン行はSimpleSAMLphpのconfig.phpでsaltを設定する項目のコメント部分に記載してあるものを丸々使ってる。
certutil -N -d . -f pass は「新しいデータベースを作れ。ディレクトリは .、パスワードの入力をユーザとインタラクティブにやらずにパスワードファイルとして pass を使え」
次は「新しい鍵ペアを作れ。RSAを持ちいること。データベース内のニックネームは testcert、証明書オーナーは cn=test2,o=example,c=jp、 認証属性は trusted peer。 独立したCAに頼らない (自己署名)。パスワードは pass ファイル、ノイズはユーザに頼まないで noise ファイルを使え」
次は「現在のディレクトリにある cert8.db, key3db, secmod.db から testcert というニックネームの鍵ペアを抽出してPKCS12フォーマットで test.p12 にエクスポートしろ。 このスロット (PKCS11 の用語。今回はさっき作ったデータベースそのもの) のパスワードは pass から取り、エクスポートするpkcs12ファイルにはパスワードは設定しない」
OpenSSLのコマンドラインによってpkcs12 ファイルの中身が出てくる。
MAC verified OK Bag Attributes friendlyName: testcert localKeyID: 66 8C 74 BF 46 C1 7D FB 7C D6 D0 D4 A7 14 A8 46 22 98 7F B1 Key Attributes: <No Attributes> -----BEGIN PRIVATE KEY----- MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKiRfOOScBqWCXfr T1l4EtYiodciKVehxEFOdnVFnt3hK78h1QRxEYahloVaiBDZ6WdQdOoXBQ53VGQV mFEf+6bcjJjpyH3UE0m66pn7Hd154Uqsh3KJk7bhhvqjIHrnj4x6e8IdDGlprSzv djRfd88J5jXdPkVFkvkgtddd4IvVAgMBAAECgYBNO5N4BSEd3T5rVkHd4TjoKafz FLDSeMidj2CQ7JwUVtWfVdXumguInsKDSO5sohrhfiiDFJb5gM0GqipGiRvYInq8 9nfpbnWFMPt3oNL0TPTk3SHoCAK4pXwcKqxcgtyS98YfPFHpTjeg2FeA2skNJmlp hyhBq1Bul76pHBG/xQJBANCpCwAA2CdmFgSPGZtSNJN/zG8Yv56Z6YnUJwBa4R/w GjBoaEmSuN4zvineeIr6A9rNB3QnNbpqI7v683cTkhcCQQDOz+hPG8DvuQey1thz R728xiGtOQunVdbsdNKSbHaeOLSFsdwg5UczXuip2OTGvYPYiFSxw7/bn7L5UCZ0 hiDzAkAd/EzyYSyu7MK5QP9DDNs1XyY3yOywlBm1juFT8btsZYq97iMef5FFjVYE mk3kWu124gPyMzhLY7li6DtYn11dAkEApTu1JqdM8frKLNe8nfY+oLlIJMcECZDq o4b+ymAAMY+qo3qkHmAxD9kPWMxilGrMEU9zI4f7HLSuYMTpxIV5gwJAeL6zQ6IA wX517zIBhHxFR24lG6oNp3U/mgdcYSYpob9LILd48+FsDE4N/FtxrU1BGBT4ZuRB dQfLzJLui5346A== -----END PRIVATE KEY----- Bag Attributes friendlyName: testcert localKeyID: 66 8C 74 BF 46 C1 7D FB 7C D6 D0 D4 A7 14 A8 46 22 98 7F B1 subject=/C=jp/O=example/CN=test issuer=/C=jp/O=example/CN=test -----BEGIN CERTIFICATE----- MIIB1DCCAT2gAwIBAgIFAJrnfHAwDQYJKoZIhvcNAQEFBQAwLjELMAkGA1UEBhMC anAxEDAOBgNVBAoTB2V4YW1wbGUxDTALBgNVBAMTBHRlc3QwHhcNMTMwMzA2MDY0 MjA2WhcNMTMwNjA2MDY0MjA2WjAuMQswCQYDVQQGEwJqcDEQMA4GA1UEChMHZXhh bXBsZTENMAsGA1UEAxMEdGVzdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA qJF845JwGpYJd+tPWXgS1iKh1yIpV6HEQU52dUWe3eErvyHVBHERhqGWhVqIENnp Z1B06hcFDndUZBWYUR/7ptyMmOnIfdQTSbrqmfsd3XnhSqyHcomTtuGG+qMgeueP jHp7wh0MaWmtLO92NF93zwnmNd0+RUWS+SC1113gi9UCAwEAATANBgkqhkiG9w0B AQUFAAOBgQAqoKIUrVHzeWiyahVxOj1Jab3Di3Tn/4B3GkWKLXi7QsJ2ebKsmsWI XPsyPeNnvfgC7UvOcLIeu47rFhy6bFs2pqeF/Gxtnq06aQJgZLleeBeZxZpQDnPQ vB0H8JhnkL+qq4j6vNJAPWWFiLtvfMg6pnHq8Pk+MZSoBqp7SPc9Xg== -----END CERTIFICATE-----
「Bad Attributes」に見えるが「Bag Attributes」。bagはpkcs12 の用語。
BEGINとENDに囲われている部分がそれぞれ秘密鍵と証明書。実用に堪えるものではないが。
それらを読みたければエディタでコピって
> openssl rsa -inform pem -in ~/priv.pem -text
> openssl x509 -in ~/pub.pem -text
などとやれば良い。