iOS開発でのサーバ側 push通知設定や、WebサーバのSSL証明書設定に使われる .pem ファイルの中身を確認する時に便利なコマンドをまとめました。
- pem ファイルとは?
- openssl コマンドのインストール方法
- pem ファイルに含まれる証明書の確認方法
- 秘密鍵の内容を表示する
- pemファイルの作り方
- (おまけ)csrの情報を出力する
pemと同様に使われる.p12ファイルの確認方法は下の記事でまとめてます。
http://[IOS][OPENSSL] .P12キーストアファイル証明書の中身を確認する
pem ファイルとは?
pemファイルは証明書とか鍵とか、サイトによってバラバラな書き方をされているので、何者かよくわからなくなります。
pem って証明書、鍵どっちなの?という疑問を持たれる方もいますが、pemファイルは鍵になることも証明書になること、両方になることも出来ます。
というのも、pemとはただのファイル書式が決まった入れ物のことで、証明書、鍵をいくつでも含めることができるからです。
pem の書式はシンプルで、任意の証明書、鍵をbase64エンコードして以下のBEGIN/END行で挟んでつなげただけのテキストファイルです。
pem の書式(鍵+証明書)
-----BEGIN RSA PRIVATE KEY----- 鍵ファイルのbase64エンコード -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- 証明書ファイルのbase64エンコード -----END CERTIFICATE-----
pem の例(証明書+鍵):
-----BEGIN CERTIFICATE----- MIIGQTCCBSmgAwIBAgIIM5HjhF+86iswDQYJKoZIhvcNAQELBQAwgZYxCzAJBgNV BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js ・・・略・・・ HqrtjOPEFu2v5H++eeyw9WTXhfOD2H6t/pXD6A62E6O0q21FiIZnITQlxvDCLqq6 I+0w8Lymm9iXGYdxzm6tCEekpzYyJ5TiiMGKMCez8IjFq7hrEqiARoE0U7zR1JOP qPTsfdoBrs5Wr8szzLo6NMMLknnT -----END CERTIFICATE----- -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAuvvBkPx5p5HIRbSnihQAlGP8CKTrH+981nMhU93OWWBzmXBT IULoO2Ah2a57H3Kxt5UHzyvawqGXOMgYk5SYq13Wnd7yqQA5JIKg+3jS2vd2C8oQ ・・・略・・・ SV4ZZCLL0FlWadPo3NVD0nnw5JvepABwdMQzCk/47efVA8LugjBGApWSpyCEEqRk 1uS4FuJSyQGczMcHLnVHBhlyfTt6DtFtwFqI3coimOU1cQj0Gg9w -----END RSA PRIVATE KEY-----
このままでは人の目では証明書・鍵の情報が見えないので、それを見やすくするには openssl コマンドを使います。
openssl コマンドのインストール方法
Mac OS X:
Homebrew からインストールできます。
brew install openssl
Linux(CentOS, RedHat系):
sudo yum install openssl
Linux(Ubuntu, Debian系):
sudo apt-get install openssl
pem ファイルに含まれる証明書の確認方法
証明書の中身(期限、フィンガープリント)を確認したい場合、このコマンドを使います。
証明書単体のcrtファイルも同じ方法で確認できます。
openssl x509 -text -fingerprint -noout -in "ファイル名.pem"
結果:
Certificate: Data: Version: 1 (0x0) Serial Number: d0:c9:5c:fc:4e:3c:b4:db Signature Algorithm: sha1WithRSAEncryption Issuer: C=JP, ST=Some-State, O=foo, Inc. Validity Not Before: Feb 13 11:07:40 2017 GMT Not After : Feb 11 11:07:40 2027 GMT Subject: C=JP, ST=Some-State, O=foo, Inc. Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (4096 bit) Modulus (4096 bit): 00:c3:d4:4c:d2:af:dc:28:48:9e:d6:13:16:64:06: e2:1e:84:d9:2c:93:bd:f9:b6:20:3e:f5:94:a1:28: 6e:9c:ea:ed:34:54:33:38:93:0c:19:9c:48:c8:4e: 7d:f3:ef:2f:ee:63:9b:10:4c:93:95:fa:59:e6:9e: ee:b1:6e:52:69:1a:1f:7a:8b:8c:4f:0d:ce:65:dd: 中略 f2:b4:05 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption b8:a8:49:f7:85:83:bd:5a:4c:b7:eb:53:4b:fa:3d:81:ed:d7: 84:fe:74:ec:c4:be:de:3b:d2:1d:0a:d9:7a:f0:25:21:83:ee: 中略 3d:ae:75:1d:d7:86:69:d4 SHA1 Fingerprint=8C:FA:F1:AA:CC:92:B3:C6:76:C1:89:BA:95:62:3B:19:C2:F5:DB:5B
Validity Not Before: Feb 13 11:07:40 2017 GMT Not After : Feb 11 11:07:40 2027 GMT
が証明書の有効期間(開始〜有効期限)
Subject: C=JP, ST=Some-State, O=foo, Inc.
が証明書にかかれているドメイン、会社名、住所などの情報です。
最後の SHA1 Fingerprint がSHA1ハッシュの署名(フィンガープリント)です。
秘密鍵の内容を表示する
pemファイル内の秘密鍵や、秘密鍵単体の.keyファイルの中身を表示するには openssl rsa コマンドを使います。
openssl rsa -text -noout -in "ファイル名.pem"
結果:
Private-Key: (4096 bit) modulus: 00:c3:d4:4c:d2:af:dc:28:48:9e:d6:13:16:64:06: e2:1e:84:d9:2c:93:bd:f9:b6:20:3e:f5:94:a1:28: … publicExponent: 65537 (0x10001) privateExponent: 64:e9:c6:1c:dc:1a:eb:77:60:c2:98:5b:75:78:46: 95:cb:87:ce:7c:e3:ed:06:79:5f:78:55:fb:26:46: … prime1: 00:e8:2b:bb:d4:e0:5e:40:0b:bc:9a:a4:b1:1d:6f: 79:cd:3b:cd:dd:68:9a:f6:cd:25:1c:f1:2a:c2:62: … prime2: 00:d7:ed:b2:2b:ab:59:df:9f:81:9d:36:ed:dc:3c: 7c:7e:59:94:9c:1c:aa:ce:61:92:3b:70:14:72:0a: … exponent1: 00:df:78:60:f6:38:f4:5f:3f:2c:cd:c8:e1:f6:0c: 3b:b7:f0:ed:69:44:eb:8b:cc:d0:01:38:9c:c8:b7: … exponent2: 0e:76:c7:a6:91:35:d5:fa:f3:4d:ba:ae:38:40:7c: fe:61:b5:c8:b7:4a:e1:c4:3b:6d:6b:d6:92:c5:15: … coefficient: 40:53:83:96:f9:ca:da:86:5f:b8:b5:db:2f:46:71: d3:ab:eb:68:c1:dd:c1:5b:8d:79:93:e9:a2:42:37: …
pemファイルの作り方
前述のとおり、pem はただ鍵や証明書などbase64エンコードしてつなげただけのファイルですので、
pem ファイルに格納したい鍵ファイル、証明書ファイルがあれば cat コマンドなどで簡単にpemファイルを作成できます。
鍵ファイル server.key と証明書ファイル server1.crt、server2.crt を結合してpemにまとめる例:
cat server.key server1.crt server2.crt > server.pem
(おまけ)csrの情報を出力する
pemとは関係ありませんが、証明書に関連して、
証明書発行リクエストに使うCSRファイルの情報出力方法も紹介します。
openssl req -text -noout -in ファイル名.csr
結果:
Certificate Request: Data: Version: 0 (0x0) Subject: C=JP, ST=Some-State, O=foo, Inc. Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (4096 bit) Modulus (4096 bit): 00:c3:d4:4c:d2:af:dc:28:48:9e:d6:13:16:64:06: e2:1e:84:d9:2c:93:bd:f9:b6:20:3e:f5:94:a1:28: … Exponent: 65537 (0x10001) Attributes: a0:00 Signature Algorithm: sha1WithRSAEncryption c1:e6:80:e4:63:d1:10:8a:f8:e4:26:33:a4:6f:62:58:66:e6: 69:56:7a:d8:e6:e5:6b:fa:63:14:cf:6d:fa:aa:76:02:59:9f: …
さいごに
証明書、鍵関係で困ったらopensslコマンドですね。便利。