pfxタイプの証明書

9 2月

Intel Collaboration Suite for WebRTC を利用する際に、HTTPS の証明書が pfx タイプのものでした。ターゲットとなるサーバーは https の証明書をもらっているのですが、apache 用なので pem タイプです。まずは、これを pfx に書き換えることから始めました。以下、まだ途中経過なのですが、作業を再現し、記録しておきたいと思います。

本物の秘密鍵を公開するわけにはいかないので、仮の鍵を作成します(参考サイト:Node.js v7.5.0 Documentation)。以下、コマンドの出力も掲載します。

$ openssl genrsa -out server.key 2048
Generating RSA private key, 2048 bit long modulus
...........................................................................+++
.+++
e is 65537 (0x10001)

これによって出来た、秘密鍵ファイル server.key は、下記のような内容です。

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEArtklu5Vc1eDvrgxJx78MWa7aRoG5MWZKplE1oCpC5RmKmvIs
GalOoS53RBZ/MLct0B7ryYBOh+YI/ojlbXHsonqAa1ibpXmfO2ba94YxoIj2A+hn
VOLWXm0S/GOIqCERs/WeDlz6ndy4AtBCClnMX+MZPbgDOytutGoTRYlJDn+0Y/aG
MreUvWqM1Ncxg6zdteCp8m9Ue9TYD7cSU7/wqiXrrxJUj+nUI+/o/QnSwGbtNiDD
AS+U/voOHYf7g7SohTxouqJchrfAkrX66YABUxyxXmj6U+4JCUtIKDSJelPB3Yri
e7rzJr10oy7Xy0fZig84KJKhc8b7O9Gvt7oLJwIDAQABAoIBAQCXgEwzl54TLI5B
TyB21VGMO/eh9DFVXn78UY2XtEa2YEU7MO+JZKxe+PYapyuaOH6XwNMpi+V/15Cf
jFrPVFFoD6FKYkKrRRD11Y+RvlMt+L7CcBNo+AwrUXOMAWqd09mVBxPm+iWlt2Qx
++XdNiXiR9LNKa6TDHUmGmuMawJEbnBcm3yNVfEhkJ88Wj9aUW5HpT9+cUamwlKa
2Tfp+PFiqFzZnaymPLzFlkbi/GHzx7PPHs6niaph5hLYa1EPa6ogdmSBeHuuUWzp
hbzLrf8iwVfoyFUPCFmpY0JdCuY6v45giWy5lR/aXjHgCjC4MT9XcecL13ZCkEaw
/ixLxfxxAoGBANccC+5j96Cn6Dx6AiGMx0TxRvVTRXs+nN1/ShRNVN2jz4vdtN60
CYOLldIlUS1VT8Hflpxk1YUx/+yUAsqUH0O3ViK40d/DRb6aZIUsF3PQjawjgC7+
AjCWDP52nRU/llcoyl6lJyrDO/rgMG1Y97JhAXF4G+nkRpky2pTbjbBdAoGBANAV
2XmN4BFDVL3qpQr3g/TbDZrj/ZCIDwLz/A9CRg5mtG9DSvLe0XzKpi9KCIbDG/fC
1OyP7QcjUv4L+ftSU69ZvXYXd5TVWMP4N1H5jXiLL2P2wQYpL12Rb003vVNnFURC
lqM4K6NQ4LtYYnv/4yXeL5EpIG42eNlCzQwL54FTAoGAOuI+kd9jpeLQu91aP/zd
f43cssM8veQB5NA3Yx9YH+P7qHnkTSJTiGLpfEEi25oC3ztpax5fJLrvJ7/Mk8/A
TzUcqxyUtwApU2fIJHxRXy6z2W9OY4684rfwjqfBkFN7wBg2bXogIqCXBrHgD87O
31GWp40NdxU6Di3Rj/YZ7zECgYBenUC4U3lJgCr8+781oFvArwWdowL9f9ALkLLQ
oVrHW425dYiTrBrmuiIcKHZ+CCMkYdN9COhGsZof54Qv8TwZ5B0QoBUAeI2W9br5
rBXWdLsEogMccQeXbPSF0M1mKd3ynrBt4LF+3dyBcuu85Bn9cux//YpAcsY6S3R+
gL8v/wKBgQDGGNUdLesi9c1efgMKtw+VwvwVSfc4l0wqLlBUZRoBrrToFaSQ8wZj
wUF7JaHixR3UvtMtmUmRmKhF/mOaBedn+hpS9gROo7UEfgXzDG+5beOMo4OwIZqG
KlV85aegq6EzCsdOKECqBQ+qoovJ2rx1+LaTdDuoe1BfhFy3RBZ/Yw==
-----END RSA PRIVATE KEY-----

https の証明書を申し込んだ時には、乱数用の?適当なファイルを用意して作成しましたが、今回は使用しません。RSA暗号では公開鍵と秘密鍵があるわけですが、この秘密鍵には公開鍵が含まれています(参考:RSA鍵、証明書のファイルフォーマットについて)。下記のコマンドで、公開鍵ファイルを作成します。

$ openssl rsa -in server.key -pubout -out public.key
writing RSA key

public.key ファイルの内容は下記。

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArtklu5Vc1eDvrgxJx78M
Wa7aRoG5MWZKplE1oCpC5RmKmvIsGalOoS53RBZ/MLct0B7ryYBOh+YI/ojlbXHs
onqAa1ibpXmfO2ba94YxoIj2A+hnVOLWXm0S/GOIqCERs/WeDlz6ndy4AtBCClnM
X+MZPbgDOytutGoTRYlJDn+0Y/aGMreUvWqM1Ncxg6zdteCp8m9Ue9TYD7cSU7/w
qiXrrxJUj+nUI+/o/QnSwGbtNiDDAS+U/voOHYf7g7SohTxouqJchrfAkrX66YAB
UxyxXmj6U+4JCUtIKDSJelPB3Yrie7rzJr10oy7Xy0fZig84KJKhc8b7O9Gvt7oL
JwIDAQAB
-----END PUBLIC KEY-----

秘密鍵からCSR(証明書発行要求)というファイルを作成します。この時、組織名などの情報を入力する必要があります。下図は本物の証明書を firefox で表示させたものです。
cert
上記にある、サーバーのURL等の情報が必要ですが、今回は適当に入力しました。下記のコマンドを打つと、対話的な入力が始まります。ところどころドット(.)を入力しているところがあります。

$ openssl req -new -sha256 -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:.
Locality Name (eg, city) []:Academe
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Oita Univ.
Organizational Unit Name (eg, section) []:kondolab
Common Name (e.g. server FQDN or YOUR name) []:192.168.100.190
Email Address []:.

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:.
An optional company name []:.

作成される server.csr の内容は下記。

-----BEGIN CERTIFICATE REQUEST-----
MIICpjCCAY4CAQAwYTELMAkGA1UEBhMCSlAxEDAOBgNVBAcMB0FjYWRlbWUxEzAR
BgNVBAoMCk9pdGEgVW5pdi4xETAPBgNVBAsMCGtvbmRvbGFiMRgwFgYDVQQDDA8x
OTIuMTY4LjEwMC4xOTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCu
2SW7lVzV4O+uDEnHvwxZrtpGgbkxZkqmUTWgKkLlGYqa8iwZqU6hLndEFn8wty3Q
HuvJgE6H5gj+iOVtceyieoBrWJuleZ87Ztr3hjGgiPYD6GdU4tZebRL8Y4ioIRGz
9Z4OXPqd3LgC0EIKWcxf4xk9uAM7K260ahNFiUkOf7Rj9oYyt5S9aozU1zGDrN21
4Knyb1R71NgPtxJTv/CqJeuvElSP6dQj7+j9CdLAZu02IMMBL5T++g4dh/uDtKiF
PGi6olyGt8CStfrpgAFTHLFeaPpT7gkJS0goNIl6U8HdiuJ7uvMmvXSjLtfLR9mK
DzgokqFzxvs70a+3ugsnAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEASOq0rgCT
vzMQ7XAFLlypUxpl5Gc73Dl1XUh4GpggM7ta6xDkO2Dms5wY4KLaH1+jvXyjqNjW
j/PQboBciTWbcktUPw6p2V9waPFjTiXzXUkt6AHoSkpxJrKVxsrAsp5J9Rwm4+SC
5rC7h6s97KS0Bb5jcei4edpx5FlHaHH27yDq2nZbR4Hbb7lqL2klsmUZ9/CYe/I9
caNG1nUnBUigtMm7fyagkPxdMMEHwfMdh0UtUgkZQi972Y4Lo/VVxuWiTJLtbTsJ
sAfQpNluOHEYy1lUQBCRa0A+ht6dMd3YqI3LPft7Zyq7yrx1cS7hfznB0lgCQGco
qXGwweBhn4UAXQ==
-----END CERTIFICATE REQUEST-----

今回は、俗に言うオレオレ証明書(self-signed certificate)を作成します。先ほどのCSRファイルと秘密鍵のファイルから証明書を下記のコマンドで作成します。

$ openssl x509 -req -in server.csr -signkey server.key -out server.cer
Signature ok
subject=/C=JP/L=Academe/O=Oita Univ./OU=kondolab/CN=192.168.100.190
Getting Private key

作成された、server.cer ファイルの内容は下記。

-----BEGIN CERTIFICATE-----
MIIDPjCCAiYCCQDTjSJLFQfECzANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJK
UDEQMA4GA1UEBwwHQWNhZGVtZTETMBEGA1UECgwKT2l0YSBVbml2LjERMA8GA1UE
CwwIa29uZG9sYWIxGDAWBgNVBAMMDzE5Mi4xNjguMTAwLjE5MDAeFw0xNzAyMDkw
OTU2NTBaFw0xNzAzMTEwOTU2NTBaMGExCzAJBgNVBAYTAkpQMRAwDgYDVQQHDAdB
Y2FkZW1lMRMwEQYDVQQKDApPaXRhIFVuaXYuMREwDwYDVQQLDAhrb25kb2xhYjEY
MBYGA1UEAwwPMTkyLjE2OC4xMDAuMTkwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEArtklu5Vc1eDvrgxJx78MWa7aRoG5MWZKplE1oCpC5RmKmvIsGalO
oS53RBZ/MLct0B7ryYBOh+YI/ojlbXHsonqAa1ibpXmfO2ba94YxoIj2A+hnVOLW
Xm0S/GOIqCERs/WeDlz6ndy4AtBCClnMX+MZPbgDOytutGoTRYlJDn+0Y/aGMreU
vWqM1Ncxg6zdteCp8m9Ue9TYD7cSU7/wqiXrrxJUj+nUI+/o/QnSwGbtNiDDAS+U
/voOHYf7g7SohTxouqJchrfAkrX66YABUxyxXmj6U+4JCUtIKDSJelPB3Yrie7rz
Jr10oy7Xy0fZig84KJKhc8b7O9Gvt7oLJwIDAQABMA0GCSqGSIb3DQEBCwUAA4IB
AQAKsWp6ifpZykUYUgVoPX8nxN8aVQ2D8DdbLOgme2LPXn20QFyzCcZI2dm1O5cw
ZavvVgDZVWAIAxU8JZDN8wwRrTkAZutJmEcb19QN+1I515OVW3dkAkYfZsE4hizR
1HPKjHZB8NhR5ybzxIdekVsXof9ASXa3c5rEm43YeOtjzID2TrrB0Jw1AgPtmTDC
3X7gVzsQCDEycmOO1/96EovCsOKGA6gkamrSWX7stufXvPAR9YEnecUtmgZu68uK
GdSWCSbfGsh48MUdvfre2nOScX36p00WvTjfnuoSCEqIY7MwwIyQEay2uvEiIos3
eLtitXHrKKOIn8w+J5C7EqIs
-----END CERTIFICATE-----

この証明書の中身を見てみます。下記のコマンドを使用すると、

$ openssl x509 -in server.cer -text -noout
Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number: 15243878019589719051 (0xd38d224b1507c40b)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=JP, L=Academe, O=Oita Univ., OU=kondolab, CN=192.168.100.190
        Validity
            Not Before: Feb  9 09:56:50 2017 GMT
            Not After : Mar 11 09:56:50 2017 GMT
        Subject: C=JP, L=Academe, O=Oita Univ., OU=kondolab, CN=192.168.100.190
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:ae:d9:25:bb:95:5c:d5:e0:ef:ae:0c:49:c7:bf:
                    0c:59:ae:da:46:81:b9:31:66:4a:a6:51:35:a0:2a:
                    42:e5:19:8a:9a:f2:2c:19:a9:4e:a1:2e:77:44:16:
                    7f:30:b7:2d:d0:1e:eb:c9:80:4e:87:e6:08:fe:88:
                    e5:6d:71:ec:a2:7a:80:6b:58:9b:a5:79:9f:3b:66:
                    da:f7:86:31:a0:88:f6:03:e8:67:54:e2:d6:5e:6d:
                    12:fc:63:88:a8:21:11:b3:f5:9e:0e:5c:fa:9d:dc:
                    b8:02:d0:42:0a:59:cc:5f:e3:19:3d:b8:03:3b:2b:
                    6e:b4:6a:13:45:89:49:0e:7f:b4:63:f6:86:32:b7:
                    94:bd:6a:8c:d4:d7:31:83:ac:dd:b5:e0:a9:f2:6f:
                    54:7b:d4:d8:0f:b7:12:53:bf:f0:aa:25:eb:af:12:
                    54:8f:e9:d4:23:ef:e8:fd:09:d2:c0:66:ed:36:20:
                    c3:01:2f:94:fe:fa:0e:1d:87:fb:83:b4:a8:85:3c:
                    68:ba:a2:5c:86:b7:c0:92:b5:fa:e9:80:01:53:1c:
                    b1:5e:68:fa:53:ee:09:09:4b:48:28:34:89:7a:53:
                    c1:dd:8a:e2:7b:ba:f3:26:bd:74:a3:2e:d7:cb:47:
                    d9:8a:0f:38:28:92:a1:73:c6:fb:3b:d1:af:b7:ba:
                    0b:27
                Exponent: 65537 (0x10001)
    Signature Algorithm: sha256WithRSAEncryption
         0a:b1:6a:7a:89:fa:59:ca:45:18:52:05:68:3d:7f:27:c4:df:
         1a:55:0d:83:f0:37:5b:2c:e8:26:7b:62:cf:5e:7d:b4:40:5c:
         b3:09:c6:48:d9:d9:b5:3b:97:30:65:ab:ef:56:00:d9:55:60:
         08:03:15:3c:25:90:cd:f3:0c:11:ad:39:00:66:eb:49:98:47:
         1b:d7:d4:0d:fb:52:39:d7:93:95:5b:77:64:02:46:1f:66:c1:
         38:86:2c:d1:d4:73:ca:8c:76:41:f0:d8:51:e7:26:f3:c4:87:
         5e:91:5b:17:a1:ff:40:49:76:b7:73:9a:c4:9b:8d:d8:78:eb:
         63:cc:80:f6:4e:ba:c1:d0:9c:35:02:03:ed:99:30:c2:dd:7e:
         e0:57:3b:10:08:31:32:72:63:8e:d7:ff:7a:12:8b:c2:b0:e2:
         86:03:a8:24:6a:6a:d2:59:7e:ec:b6:e7:d7:bc:f0:11:f5:81:
         27:79:c5:2d:9a:06:6e:eb:cb:8a:19:d4:96:09:26:df:1a:c8:
         78:f0:c5:1d:bd:fa:de:da:73:92:71:7d:fa:a7:4d:16:bd:38:
         df:9e:ea:12:08:4a:88:63:b3:30:c0:8c:90:11:ac:b6:ba:f1:
         22:22:8b:37:78:bb:62:b5:71:eb:28:a3:88:9f:cc:3e:27:90:
         bb:12:a2:2c

公開鍵に関する情報があるのかな?pem 形式で、公開鍵を得るには下記のコマンド、

$ openssl x509 -in server.cer -pubkey -noout
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArtklu5Vc1eDvrgxJx78M
Wa7aRoG5MWZKplE1oCpC5RmKmvIsGalOoS53RBZ/MLct0B7ryYBOh+YI/ojlbXHs
onqAa1ibpXmfO2ba94YxoIj2A+hnVOLWXm0S/GOIqCERs/WeDlz6ndy4AtBCClnM
X+MZPbgDOytutGoTRYlJDn+0Y/aGMreUvWqM1Ncxg6zdteCp8m9Ue9TYD7cSU7/w
qiXrrxJUj+nUI+/o/QnSwGbtNiDDAS+U/voOHYf7g7SohTxouqJchrfAkrX66YAB
UxyxXmj6U+4JCUtIKDSJelPB3Yrie7rzJr10oy7Xy0fZig84KJKhc8b7O9Gvt7oL
JwIDAQAB
-----END PUBLIC KEY-----

秘密鍵から取り出した公開鍵と同じです。

さて、やっと本題ですが、この証明書を pfx タイプに変換します。下記のコマンドで、server.cer 読み込んで作成します。秘密鍵も読み込みます。途中で、暗号化のパスワードを入力しています。本番では、中間証明書などがあるので、それを読み込むオプションも付けるのですが(参考サイト)、今回はありません。

$ openssl pkcs12 -export -in server.cer -inkey server.key -out server.pfx
Enter Export Password:
Verifying - Enter Export Password:

server.pfx というファイルが作成されるのですが、バイナリーファイルで表示できません。それ故、きちんと出来上がったのか不安になります。以下、その確認の話です。

参考サイト

  1. OpenSSLでpfx形式、PKCS#12形式をPEM形式に変換する
  2. pfx形式、PKCS#12形式の証明書をOpenSSLでpem形式に変更する
  3. opensslでRSA暗号と遊ぶ

server.pfx の内容を表示してみます。下記のコマンドで、内容が pem 形式で書き出されます。

$ openssl pkcs12 -in server.pfx -nodes -out output.pem
Enter Import Password:
MAC verified OK

output.pem の内容は下記です。

Bag Attributes
    localKeyID: C1 5F 2E F7 7E 0F D7 29 CB 63 EE CE 7E 7A 49 A3 88 65 5F 9B 
subject=/C=JP/L=Academe/O=Oita Univ./OU=kondolab/CN=192.168.100.190
issuer=/C=JP/L=Academe/O=Oita Univ./OU=kondolab/CN=192.168.100.190
-----BEGIN CERTIFICATE-----
MIIDPjCCAiYCCQDTjSJLFQfECzANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJK
UDEQMA4GA1UEBwwHQWNhZGVtZTETMBEGA1UECgwKT2l0YSBVbml2LjERMA8GA1UE
CwwIa29uZG9sYWIxGDAWBgNVBAMMDzE5Mi4xNjguMTAwLjE5MDAeFw0xNzAyMDkw
OTU2NTBaFw0xNzAzMTEwOTU2NTBaMGExCzAJBgNVBAYTAkpQMRAwDgYDVQQHDAdB
Y2FkZW1lMRMwEQYDVQQKDApPaXRhIFVuaXYuMREwDwYDVQQLDAhrb25kb2xhYjEY
MBYGA1UEAwwPMTkyLjE2OC4xMDAuMTkwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEArtklu5Vc1eDvrgxJx78MWa7aRoG5MWZKplE1oCpC5RmKmvIsGalO
oS53RBZ/MLct0B7ryYBOh+YI/ojlbXHsonqAa1ibpXmfO2ba94YxoIj2A+hnVOLW
Xm0S/GOIqCERs/WeDlz6ndy4AtBCClnMX+MZPbgDOytutGoTRYlJDn+0Y/aGMreU
vWqM1Ncxg6zdteCp8m9Ue9TYD7cSU7/wqiXrrxJUj+nUI+/o/QnSwGbtNiDDAS+U
/voOHYf7g7SohTxouqJchrfAkrX66YABUxyxXmj6U+4JCUtIKDSJelPB3Yrie7rz
Jr10oy7Xy0fZig84KJKhc8b7O9Gvt7oLJwIDAQABMA0GCSqGSIb3DQEBCwUAA4IB
AQAKsWp6ifpZykUYUgVoPX8nxN8aVQ2D8DdbLOgme2LPXn20QFyzCcZI2dm1O5cw
ZavvVgDZVWAIAxU8JZDN8wwRrTkAZutJmEcb19QN+1I515OVW3dkAkYfZsE4hizR
1HPKjHZB8NhR5ybzxIdekVsXof9ASXa3c5rEm43YeOtjzID2TrrB0Jw1AgPtmTDC
3X7gVzsQCDEycmOO1/96EovCsOKGA6gkamrSWX7stufXvPAR9YEnecUtmgZu68uK
GdSWCSbfGsh48MUdvfre2nOScX36p00WvTjfnuoSCEqIY7MwwIyQEay2uvEiIos3
eLtitXHrKKOIn8w+J5C7EqIs
-----END CERTIFICATE-----
Bag Attributes
    localKeyID: C1 5F 2E F7 7E 0F D7 29 CB 63 EE CE 7E 7A 49 A3 88 65 5F 9B 
Key Attributes: 
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCu2SW7lVzV4O+u
DEnHvwxZrtpGgbkxZkqmUTWgKkLlGYqa8iwZqU6hLndEFn8wty3QHuvJgE6H5gj+
iOVtceyieoBrWJuleZ87Ztr3hjGgiPYD6GdU4tZebRL8Y4ioIRGz9Z4OXPqd3LgC
0EIKWcxf4xk9uAM7K260ahNFiUkOf7Rj9oYyt5S9aozU1zGDrN214Knyb1R71NgP
txJTv/CqJeuvElSP6dQj7+j9CdLAZu02IMMBL5T++g4dh/uDtKiFPGi6olyGt8CS
tfrpgAFTHLFeaPpT7gkJS0goNIl6U8HdiuJ7uvMmvXSjLtfLR9mKDzgokqFzxvs7
0a+3ugsnAgMBAAECggEBAJeATDOXnhMsjkFPIHbVUYw796H0MVVefvxRjZe0RrZg
RTsw74lkrF749hqnK5o4fpfA0ymL5X/XkJ+MWs9UUWgPoUpiQqtFEPXVj5G+Uy34
vsJwE2j4DCtRc4wBap3T2ZUHE+b6JaW3ZDH75d02JeJH0s0prpMMdSYaa4xrAkRu
cFybfI1V8SGQnzxaP1pRbkelP35xRqbCUprZN+n48WKoXNmdrKY8vMWWRuL8YfPH
s88ezqeJqmHmEthrUQ9rqiB2ZIF4e65RbOmFvMut/yLBV+jIVQ8IWaljQl0K5jq/
jmCJbLmVH9peMeAKMLgxP1dx5wvXdkKQRrD+LEvF/HECgYEA1xwL7mP3oKfoPHoC
IYzHRPFG9VNFez6c3X9KFE1U3aPPi9203rQJg4uV0iVRLVVPwd+WnGTVhTH/7JQC
ypQfQ7dWIrjR38NFvppkhSwXc9CNrCOALv4CMJYM/nadFT+WVyjKXqUnKsM7+uAw
bVj3smEBcXgb6eRGmTLalNuNsF0CgYEA0BXZeY3gEUNUveqlCveD9NsNmuP9kIgP
AvP8D0JGDma0b0NK8t7RfMqmL0oIhsMb98LU7I/tByNS/gv5+1JTr1m9dhd3lNVY
w/g3UfmNeIsvY/bBBikvXZFvTTe9U2cVREKWozgro1Dgu1hie//jJd4vkSkgbjZ4
2ULNDAvngVMCgYA64j6R32Ol4tC73Vo//N1/jdyywzy95AHk0DdjH1gf4/uoeeRN
IlOIYul8QSLbmgLfO2lrHl8kuu8nv8yTz8BPNRyrHJS3AClTZ8gkfFFfLrPZb05j
jrzit/COp8GQU3vAGDZteiAioJcGseAPzs7fUZanjQ13FToOLdGP9hnvMQKBgF6d
QLhTeUmAKvz7vzWgW8CvBZ2jAv1/0AuQstChWsdbjbl1iJOsGua6Ihwodn4IIyRh
030I6Eaxmh/nhC/xPBnkHRCgFQB4jZb1uvmsFdZ0uwSiAxxxB5ds9IXQzWYp3fKe
sG3gsX7d3IFy67zkGf1y7H/9ikByxjpLdH6Avy//AoGBAMYY1R0t6yL1zV5+Awq3
D5XC/BVJ9ziXTCouUFRlGgGutOgVpJDzBmPBQXsloeLFHdS+0y2ZSZGYqEX+Y5oF
52f6GlL2BE6jtQR+BfMMb7lt44yjg7AhmoYqVXzlp6CroTMKx04oQKoFD6qii8na
vHX4tpN0O6h7UF+EXLdEFn9j
-----END PRIVATE KEY-----

証明書と秘密鍵が入っています。証明書を元のものと比べると一致していることが分かります。しかし、秘密鍵を比べると異なっています。この秘密鍵の部分だけを切り取って、output.key として保存します。

output.key の中の公開鍵を表示します。

$ openssl rsa -in output.key -pubout
writing RSA key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArtklu5Vc1eDvrgxJx78M
Wa7aRoG5MWZKplE1oCpC5RmKmvIsGalOoS53RBZ/MLct0B7ryYBOh+YI/ojlbXHs
onqAa1ibpXmfO2ba94YxoIj2A+hnVOLWXm0S/GOIqCERs/WeDlz6ndy4AtBCClnM
X+MZPbgDOytutGoTRYlJDn+0Y/aGMreUvWqM1Ncxg6zdteCp8m9Ue9TYD7cSU7/w
qiXrrxJUj+nUI+/o/QnSwGbtNiDDAS+U/voOHYf7g7SohTxouqJchrfAkrX66YAB
UxyxXmj6U+4JCUtIKDSJelPB3Yrie7rzJr10oy7Xy0fZig84KJKhc8b7O9Gvt7oL
JwIDAQAB
-----END PUBLIC KEY-----

これは、確かに元々の公開鍵と一致しています。そこで、暗号化と復号を試してみます。
まず、元々の公開鍵 public.key で”HELLO” を暗号化します。

$ echo "HELLO" | openssl rsautl -encrypt -pubin -inkey public.key > message

この message は、バイナリーファイルです。これを output.key で複合します。

$ cat message | openssl rsautl -decrypt -inkey output.key 
HELLO

確かに、復号できました。見た目は異なっているのですが、正しい秘密鍵ではあるようです。なぜ、見た目が異なるのか分かりませんが。

とりあえず今回はここまで。 pfx ファイルは、きちんと作成されているのではないかというところで終わります。あとは、nodejs へのインストールです。pfx ファイルは、秘密鍵に相当するファイルですよね?