- 1 opensslコマンドとは?
- 2 検証環境
- 3 opensslパッケージのインストール方法
- 4 opensslのコマンド表示方法
- 5 genrsaコマンドの使い方
- 6 s_clientコマンドの使い方
- 7 s_serverコマンドの使い方
- 8 X509コマンドの使い方
- 9 ciphersコマンドの使い方
- 10 dgstコマンドの使い方
- 11 rsautlコマンドの使いかた
- 12 ブラウザで証明書を確認する方法
- 13 opensslコマンドで証明書を確認する方法
- Z 参考情報
1 opensslコマンドとは?
opensslコマンドは、以下のような様々な暗号化機能を実行できます。manより抜粋したものを以下に示します。
2 検証環境
2.1 ネットワーク構成
サーバとクライアントの2台構成です。図中のeth0はNICの名前です。
192.168.2.0/24 client(eth0) -------------------------------------------- (eth0) server .105 .100
3 opensslパッケージのインストール方法
サーバ、クライアントにopensslパッケージをインストールします。
[root@server ~]# yum -y install openssl
opensslコマンドの版数を確認します。
[root@server ~]# openssl version OpenSSL 1.0.2k-fips 26 Jan 2017
4 opensslのコマンド表示方法
man opensslより引用したopensslの書式を以下に示します。
openssl command [ command_opts ] [ command_args ]
上記書式のcommandの部分ですが、多数のコマンドが存在します。ここでは、どのようなコマンドが存在するのかを確認する方法について説明します。コマンドの分類として、大きく以下のものがあります。
・標準コマンド(list-standard-commands)
・メッセージダイジェストのコマンド(list-message-digest-commands)
・暗号スイートのコマンド(list-cipher-commands)
・暗号スイートのアルゴリズムに関するコマンド(list-cipher-algorithms)
・メッセージダイジェストのアルゴリズムに関するコマンド(list-message-digest-algorithms)
・公開鍵のアルゴリズムに関するコマンド(list-public-key-algorithms)
4.1 標準コマンドの表示方法(list-standard-commands)
標準コマンドを表示してみます。asn1parse,ca,ciphers等の標準コマンドがあることがわかります。
[root@server ~]# openssl list-standard-commands asn1parse ca ciphers -snip-
"man asn1parse"と実行すると、asn1parseのマニュアルを表示することができます。
[root@server ~]# man asn1parse
4.2 メッセージダイジェストを生成するコマンドの表示方法(list-message-digest-commands)
メッセージダイジェストを生成するコマンドを表示してみます。md2,md4,md5等のコマンドがあることがわかります。
[root@server ~]# openssl list-message-digest-commands md2 md4 md5 -snip-
"man md2"と実行すると、md2のマニュアルを表示することができます。
[root@server ~]# man md2
4.3 暗号スイートのコマンドを表示する方法(list-cipher-commands)
暗号スイートのコマンドを表示してみます。aes-128-cbc,aes-128-ecb,aes-192-cbc等のコマンドがあることがわかります。
[root@server ~]# openssl list-cipher-commands aes-128-cbc aes-128-ecb aes-192-cbc -snip-
4.4 暗号スイート一覧を表示する方法(list-cipher-algorithms)
暗号スイート一覧を表示してみます。
TLS1.2 までの暗号スイートは、"鍵交換ー署名ー暗号化ーハッシュ関数"の組によって構成されます。TLS1.3 の暗号スイートは、"暗号化ーハッシュ関数"の組み合わせになりました。
https://www.ipa.go.jp/security/ipg/documents/ipa-cryptrec-gl-3001-3.0.1.pdf
[root@server ~]# openssl list-cipher-algorithms AES-128-CBC AES-128-CBC-HMAC-SHA1 AES-128-CBC-HMAC-SHA256 -snip-
5 genrsaコマンドの使い方
genrsaは、RSA秘密鍵を生成するコマンドです。"man genrsa"と実行すると、genrsaのマニュアルを参照することができます。
NAME genrsa - generate an RSA private key SYNOPSIS openssl genrsa [-out filename] [-passout arg] [-aes128] [-aes192] [-aes256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [-engine id] [numbits] DESCRIPTION The genrsa command generates an RSA private key. -snip-
ここでは、genrsaコマンドで秘密鍵を作成し、秘密鍵に対する公開鍵を作成してみます。また、作成した秘密鍵にパスフレーズを設定してみます。まず、2048ビットのRSA秘密鍵(private.key)を生成します
[root@server ~]# openssl genrsa -out private.key 2048 Generating RSA private key, 2048 bit long modulus ....................................+++ .................................................+++ e is 65537 (0x10001)
作成した秘密鍵(private.key)を確認します。fileコマンドで確認すると、private.keyが秘密鍵であることがわかります。
[root@server ~]# file private.key private.key: PEM RSA private key
作成した秘密鍵は、他人に読まれてはいけないので、パミッションを変更します。
[root@server ~]# chmod 400 private.key [root@server ~]# ls -l private.key -r--------. 1 root root 1679 1月 26 17:19 private.key
生成した秘密鍵の中身を確認してみます。BEGINとENDの間が秘密鍵になります。
[root@server ~]# cat private.key -----BEGIN RSA PRIVATE KEY----- -snip- -----END RSA PRIVATE KEY-----
次は、秘密鍵(private.key)に対する公開鍵(public.key)を作成してみます。
[root@server ~]# openssl rsa -in private.key -pubout -out public.key writing RSA key
公開鍵(public.key)のファイルタイプを確認してみます。
[root@server ~]# file public.key public.key: ASCII text
最後に、秘密鍵にパスフレーズを設定します。
秘密鍵をそのまま保存しておくのは良くありません。もし秘密鍵が盗まれると、暗号通信が全て解読できてしまうからです。そこで 秘密鍵にパスフレーズを設定して、秘密鍵を盗まれても利用できないようにしておきます。ここでは、des3で秘密鍵を暗号化してみます。des3の他にdes,idea等があります。
[root@server ~]# openssl genrsa -out private.key -des3 2048 Generating RSA private key, 2048 bit long modulus ...................+++ ..............+++ e is 65537 (0x10001) Enter pass phrase for private.key: ★パスフレーズの設定 Verifying - Enter pass phrase for private.key: ★もう一度パスフレーズの設定
6 s_clientコマンドの使い方
s_clientコマンドは、TLSクライアントとして動作します。
[root@server ~]# man s_client S_CLIENT(1) OpenSSL S_CLIENT(1) NAME s_client - SSL/TLS client program -snip-
6.1 基本的な使い方
connectオプションを使って、www.example.comにTLSで接続してみます。なお、example.comはIANAが予約しているドメインです。
[root@server ~]# openssl s_client -connect www.example.com:443 CONNECTED(00000003) depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA verify return:1 depth=1 C = US, O = DigiCert Inc, CN = DigiCert TLS RSA SHA256 2020 CA1 verify return:1 depth=0 C = US, ST = California, L = Los Angeles, O = "Verizon Digital Media Services, Inc.", CN = www.example.org verify return:1 --- Certificate chain 0 s:/C=US/ST=California/L=Los Angeles/O=Verizon Digital Media Services, Inc./CN=www.example.org i:/C=US/O=DigiCert Inc/CN=DigiCert TLS RSA SHA256 2020 CA1 1 s:/C=US/O=DigiCert Inc/CN=DigiCert TLS RSA SHA256 2020 CA1 i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA --- Server certificate -----BEGIN CERTIFICATE----- MIIHNjCCBh6gAwIBAgIQAlIW4cSZjiYyql0dqYW0PDANBgkqhkiG9w0BAQsFADBP MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMSkwJwYDVQQDEyBE aWdpQ2VydCBUTFMgUlNBIFNIQTI1NiAyMDIwIENBMTAeFw0yMTEyMTAwMDAwMDBa Fw0yMjEyMDkyMzU5NTlaMIGBMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZv cm5pYTEUMBIGA1UEBxMLTG9zIEFuZ2VsZXMxLTArBgNVBAoTJFZlcml6b24gRGln aXRhbCBNZWRpYSBTZXJ2aWNlcywgSW5jLjEYMBYGA1UEAxMPd3d3LmV4YW1wbGUu b3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoDBCVtcLoRG58wvs zPJMsG8TAmvPB/OF8EKPxVSYgW56kzi2+kZCs1zmyTtZk2EkQyD1eonJd63/h8gI 24b13GF1ll/c8AjKOrleD/o3fGVqyggnHp3YCj+eENtFJZoDcrr1J9mw6zbUkzmM EWxfMxRY5cCIxR96IRTM0qdfHHMf2QMgbnoI7xdO474owE/gcWMhBHePj0sr6Aui vpd+UG+4Ozdjf6QMmf+WosN/ynwhuv2Q0T8FpDRw1oSOpQDcKXz9lstDrjmPLcat 2MIdm+RfnFGci/5tSWJbx80eGJbOxioHt3GAYHKsVxIAkEMPI76pcHHW5XuFo00F iCHHIwIDAQABo4ID2TCCA9UwHwYDVR0jBBgwFoAUt2ui6qiqhIx56rTaD5iyxZV2 ufQwHQYDVR0OBBYEFG3g+qTIbys3Dg1NyBKa0QeBaGBEMIGBBgNVHREEejB4gg93 d3cuZXhhbXBsZS5vcmeCC2V4YW1wbGUubmV0ggtleGFtcGxlLmVkdYILZXhhbXBs ZS5jb22CC2V4YW1wbGUub3Jngg93d3cuZXhhbXBsZS5jb22CD3d3dy5leGFtcGxl LmVkdYIPd3d3LmV4YW1wbGUubmV0MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAU BggrBgEFBQcDAQYIKwYBBQUHAwIwgY8GA1UdHwSBhzCBhDBAoD6gPIY6aHR0cDov L2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VExTUlNBU0hBMjU2MjAyMENBMS00 LmNybDBAoD6gPIY6aHR0cDovL2NybDQuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VExT UlNBU0hBMjU2MjAyMENBMS00LmNybDA+BgNVHSAENzA1MDMGBmeBDAECAjApMCcG CCsGAQUFBwIBFhtodHRwOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwfwYIKwYBBQUH AQEEczBxMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wSQYI KwYBBQUHMAKGPWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRM U1JTQVNIQTI1NjIwMjBDQTEtMS5jcnQwDAYDVR0TAQH/BAIwADCCAX0GCisGAQQB 1nkCBAIEggFtBIIBaQFnAHYARqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+ bUcAAAF9osbrcAAABAMARzBFAiEA5RwolQhRMWvTnyCNwRK/v/mG2S9Df0gRhXWK pJuhG+YCIENHIK5yyKs3fLL9nlO9ckl5b9xbo8K3FP+N+keoBB+ZAHUAQcjKsd8i RkoQxqE6CUKHXk4xixsD6+tLx2jwkGKWBvYAAAF9osbrPAAABAMARjBEAiB7M05v Xh19tt1EbNsZEqb7/PrJRfeMOLz1O1UTOKCH1gIgf4nU/wBGtMERQuxeebdmf3wz +5Q0pOgf2rEi4a016SUAdgDfpV6raIJPH2yt7rhfTj5a6s2iEqRqXo47EsAgRFwq cwAAAX2ixut2AAAEAwBHMEUCIQDQjMsK3kzqSnGNY9Y5k0bLwo2/YN/2F0oaqXXi NdOjJAIgFw06n1b8M6QdD98zAsRR4e52c0O7YzvrJXfRSE3JnfowDQYJKoZIhvcN AQELBQADggEBAKVUNGn++wNr8agdWjZ5WY9cYqJjmQTQY3g5VkQMNaJiXIivehDU TcFPqtfimTlVlVrfLGxYRAOZrzkGoQjUf99IKJW4ZUOQ0WDsKoaowU1qfzpGTwbr jzmed2HbLlTP8NjQpYPMEIIiRQUC1iUK+0lf0UOq5mLJ3Cq3yL9UbOyhYTX9ha05 c5/nZHvhwCNvyie5RT6jWLcMH69hPS2DGiVr8HG4iV1W1F3/X+HeBOsEo1YyYlII SCHB72Cijki2QiAHzPqy71H9MDt9jH2jbYKVRIDRJ20eF2Y1+rk7qQjwLoBM44Af W9N7n6eEuv2HEWnaVBymoUjHaSEzYydzVOg= -----END CERTIFICATE----- subject=/C=US/ST=California/L=Los Angeles/O=Verizon Digital Media Services, Inc./CN=www.example.org issuer=/C=US/O=DigiCert Inc/CN=DigiCert TLS RSA SHA256 2020 CA1 --- No client certificate CA names sent Peer signing digest: SHA256 Server Temp Key: ECDH, P-256, 256 bits --- SSL handshake has read 3725 bytes and written 415 bytes --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES128-GCM-SHA256 Session-ID: D314F6276859BD4117F58A13B30FCB246E1D722F8277D80A3F6C80F56CA246BE Session-ID-ctx: Master-Key: 427BB7AD3C5C32CA34CE34D200DCDDC6165FB4F73D8228FEC0850693B5958C756CAE4537AE717D22447FA4509AABB869 Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None TLS session ticket lifetime hint: 7200 (seconds) TLS session ticket: 0000 - d2 71 59 b7 50 27 0c d4-bc 50 76 3b 95 33 c5 b0 .qY.P'...Pv;.3.. 0010 - 6d 62 24 aa 86 65 56 84-0a 57 c6 29 88 c5 de b9 mb$..eV..W.).... 0020 - 1b 4b 66 02 49 b0 30 fa-a6 0a 1f 37 e9 b6 01 f1 .Kf.I.0....7.... 0030 - 38 bf f3 19 d0 4d 80 0b-0d 84 c3 8f ee 6a 7e be 8....M.......j~. 0040 - 5c f6 9d e9 c1 b9 bb 2f-5c f6 39 a8 4a 4b 2a 74 \....../\.9.JK*t 0050 - 7a 28 19 fe fa d7 bb d2-df d8 ff 92 7e 50 4f f3 z(..........~PO. 0060 - 9f 86 82 54 c3 42 91 1c-de 3a fc 28 b9 65 c2 c6 ...T.B...:.(.e.. 0070 - c8 dc 98 a5 40 4b 72 bb-fc 4d 23 90 8b 42 f9 59 ....@Kr..M#..B.Y 0080 - 3e 3e 36 8b 5b c5 1a 4a-79 d2 00 52 c0 b1 13 d3 >>6.[..Jy..R.... 0090 - 23 30 41 7b 01 b3 76 dd-26 8a 94 36 40 8e a0 1a #0A{..v.&..6@... Start Time: 1643186378 Timeout : 300 (sec) Verify return code: 0 (ok) ---
6.2 SNI(Server Name Indication)対応サーバに接続する方法
SNIはSSL/TLSの拡張仕様の一つです。1つのIPで複数のSSL/TLS証明書を保持する技術です。TLSハンドシェイク時にクライアントがアクセスしたいホスト名を伝えることで、サーバ側がIPではなくホスト名によって異なる証明書を使い分けることができます。この設定がされたホストに接続するときは、SNIに必要なホスト名の情報を”servername"オプションで指定します。首相官邸のWebサーバにアクセスしてみます。
[root@server ~]# openssl s_client -connect www.kantei.go.jp:443 -servername www.kantei.go.jp CONNECTED(00000003) depth=2 OU = GlobalSign Root CA - R3, O = GlobalSign, CN = GlobalSign verify return:1 depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign RSA OV SSL CA 2018 verify return:1 depth=0 C = JP, ST = Tokyo, L = Chiyoda-ku, OU = Cabinet Public Relations Office, O = Cabinet Secretariat, CN = *.kantei.go.jp verify return:1 --- Certificate chain 0 s:/C=JP/ST=Tokyo/L=Chiyoda-ku/OU=Cabinet Public Relations Office/O=Cabinet Secretariat/CN=*.kantei.go.jp i:/C=BE/O=GlobalSign nv-sa/CN=GlobalSign RSA OV SSL CA 2018 1 s:/C=BE/O=GlobalSign nv-sa/CN=GlobalSign RSA OV SSL CA 2018 i:/OU=GlobalSign Root CA - R3/O=GlobalSign/CN=GlobalSign --- Server certificate -----BEGIN CERTIFICATE----- MIIGfjCCBWagAwIBAgIMfqluVk7j4i9C++E/MA0GCSqGSIb3DQEBCwUAMFAxCzAJ BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSYwJAYDVQQDEx1H bG9iYWxTaWduIFJTQSBPViBTU0wgQ0EgMjAxODAeFw0yMTA4MjUwNDQ2MDJaFw0y MjA5MjYwNDQ2MDJaMIGTMQswCQYDVQQGEwJKUDEOMAwGA1UECBMFVG9reW8xEzAR BgNVBAcTCkNoaXlvZGEta3UxKDAmBgNVBAsTH0NhYmluZXQgUHVibGljIFJlbGF0 aW9ucyBPZmZpY2UxHDAaBgNVBAoTE0NhYmluZXQgU2VjcmV0YXJpYXQxFzAVBgNV BAMMDioua2FudGVpLmdvLmpwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEA1/Wppfk+xMtGTQ6wXbZreK9kWFut+qZBZ+8oEZRscbAUvRTsUdF1XF8jkulC FGZ7nqb2ytlJ51A/StzQrFnYP6l3CPth7Fkn+I8aWWt/6YbC4OUaFCcDZGwyo5+F ugdy2Sex5qyWMcs1HkWzNsZii+MxyAcsqMpV0n5c1qY+I3T2ow8+oALBBIf9Kg4r GQysVcHWczjo16FAOgzyitF8uaPY9oOdq8uBcx6C6QbNsK9LyOScBlUQJZfYVhqI OryNPoFW1D6nNasXznrr5ENPdUztTvH90cpBSqQwLn3ikuUWhBlZEyhyJfL8ZNaE F0iEsKANPnYOf8fqNsy0vASIBwIDAQABo4IDEjCCAw4wDgYDVR0PAQH/BAQDAgWg MIGOBggrBgEFBQcBAQSBgTB/MEQGCCsGAQUFBzAChjhodHRwOi8vc2VjdXJlLmds b2JhbHNpZ24uY29tL2NhY2VydC9nc3JzYW92c3NsY2EyMDE4LmNydDA3BggrBgEF BQcwAYYraHR0cDovL29jc3AuZ2xvYmFsc2lnbi5jb20vZ3Nyc2FvdnNzbGNhMjAx ODBWBgNVHSAETzBNMEEGCSsGAQQBoDIBFDA0MDIGCCsGAQUFBwIBFiZodHRwczov L3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAIBgZngQwBAgIwCQYDVR0T BAIwADAnBgNVHREEIDAegg4qLmthbnRlaS5nby5qcIIMa2FudGVpLmdvLmpwMB0G A1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAfBgNVHSMEGDAWgBT473/yzXhn qN5vjySNiPGHAwKz6zAdBgNVHQ4EFgQU/gqsahuC4X1e0kCJ6KlDmSL+WlcwggF+ BgorBgEEAdZ5AgQCBIIBbgSCAWoBaAB2ACl5vvCeOTkh8FZzn2Old+W+V32cYAr4 +U1dJlwlXceEAAABe3uhJnQAAAQDAEcwRQIgOfl6cFN2h7jjubBWjxC/Kirhmkyf m9NrCNNmJzltf9ECIQChYCML2ZN7R7Hi4U+6gbUN0CsZ0X+SQo468ZCbzPiSKAB2 AFWB1MIWkDYBSuoLm1c8U/DA5Dh4cCUIFy+jqh0HE9MMAAABe3uhJpsAAAQDAEcw RQIhAMbcLWECP2EgEapkQ8FaPQj/uLvRjRPMXWb6UTzLVzHeAiAf0Gcw6lQuLKY6 RWwtIVL9YGYz1wpBi1QlEvv7FHAsOwB2AEalVet1+pEgMLWiiWn0830RLEF0vv1J uIWr8vxw/m1HAAABe3uhJrkAAAQDAEcwRQIhAJ50Qifl+lPkbJ5J0DQpIDLNo8Uc pcehYJopDgW2T7UJAiB38hlotY9hwBK3mxQv2IHm78P59DQzB2vW8D7owOM49jAN BgkqhkiG9w0BAQsFAAOCAQEAZaUIDQmIywFPkrQwL1CF4/sUSmi201v1unmBcA8P qcJopulDtPyZT2aO3CXTfVV46aqwIDaorEJeHY9GqCBe7fnJvy08hgOWp2vnphbU khUgmtCH+7Z8W6rySNunPnN3UxxXc+OZUYBWN526pbYnKTbUZN/Hsr/dIr2OmyQ9 iXbZLXyR4g61TTXRvxC2HvKwmxKi182zXyUproS0++5diYlDXoNGNbta+LhfW97G s7wzhZ3sTaKoMtGS8tbUCPCrhyfn1iWeKGxiW410+YyjOf++4Kt9of4KQvEaQjXh BHlZ2APoV/iTh+/R8HMjxEhH2pcxqAimkFLOit3RoUZhDA== -----END CERTIFICATE----- subject=/C=JP/ST=Tokyo/L=Chiyoda-ku/OU=Cabinet Public Relations Office/O=Cabinet Secretariat/CN=*.kantei.go.jp issuer=/C=BE/O=GlobalSign nv-sa/CN=GlobalSign RSA OV SSL CA 2018 --- No client certificate CA names sent Peer signing digest: SHA256 Server Temp Key: ECDH, P-256, 256 bits --- SSL handshake has read 3408 bytes and written 440 bytes --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES128-GCM-SHA256 Session-ID: 826E2DC111CB5EFB8BB188FCA470E6A583D169CF533EBB21BE02FD68E322CD98 Session-ID-ctx: Master-Key: 4E806CC36BE007F64A4F8D8E4FB8BBB2395602047F45CB69B08C0F5D253C2C13A35F0B413A169B831CE13E4837DAF631 Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None TLS session ticket lifetime hint: 86400 (seconds) TLS session ticket: 0000 - 31 36 34 33 34 31 30 32-37 35 30 30 30 00 00 00 1643410275000... 0010 - cd da 28 0a 52 9a 0a c2-f5 f1 9b 50 ec 3c c0 92 ..(.R......P.<.. 0020 - 3f d3 c3 24 45 e9 bb 9c-5e 4c b6 63 3f c6 e8 d9 ?..$E...^L.c?... 0030 - 44 c4 2e 2c ed 3b fd 3b-3e 0a 43 82 42 93 91 53 D..,.;.;>.C.B..S 0040 - f7 f2 e7 ee ec f9 c3 2a-be bc 62 06 22 3b 50 07 .......*..b.";P. 0050 - f1 60 ad 33 ef 84 71 6a-5a 47 77 fe b6 c2 93 41 .`.3..qjZGw....A 0060 - 62 7d 0b 03 4d 7d 3b ac-ab b}..M};.. Start Time: 1643442022 Timeout : 300 (sec) Verify return code: 0 (ok) --- ^C
以前(2018年頃)、記事を執筆した際、"servername"オプションを指定しなくても、首相官邸のWebサーバにアクセスできたのですが、"servername"オプションを指定しないと、以下のようにエラーになります。どこかのタイミングでSNI対応になったのですかね。
[root@server ~]# openssl s_client -connect www.kantei.go.jp:443 --- SSL handshake has read 7 bytes and written 289 bytes --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported -snip-
6.3 実行結果を簡潔に表示する方法(-brief)
[root@server ~]# openssl s_client -connect www.example.com:443 -brief CONNECTION ESTABLISHED Protocol version: TLSv1.2 Ciphersuite: ECDHE-RSA-AES128-GCM-SHA256 Peer certificate: C = US, ST = California, L = Los Angeles, O = "Verizon Digital Media Services, Inc.", CN = www.example.org Hash used: SHA256 Supported Elliptic Curve Point Formats: uncompressed:ansiX962_compressed_prime:ansiX962_compressed_char2 Server Temp Key: ECDH, P-256, 256 bits ^C
6.4 TLSバージョンを指定してTLSサーバに接続する方法
TLS1.2で接続してみます。
[root@server ~]# openssl s_client -connect www.google.com:443 -tls1_2 -brief CONNECTION ESTABLISHED Protocol version: TLSv1.2 Ciphersuite: ECDHE-RSA-AES128-GCM-SHA256 Peer certificate: CN = www.google.com Hash used: SHA256 Supported Elliptic Curve Point Formats: uncompressed Server Temp Key: ECDH, P-256, 256 bits ^C
TLS1.1で接続してみます。まだ、TLS1.1使えるのですね。。
[root@server ~]# openssl s_client -connect www.google.com:443 -tls1_1 -brief CONNECTION ESTABLISHED Protocol version: TLSv1.1 Ciphersuite: ECDHE-RSA-AES128-SHA Peer certificate: CN = www.google.com Supported Elliptic Curve Point Formats: uncompressed Server Temp Key: ECDH, P-256, 256 bits ^C
6.5 証明書チェインを表示する方法(-showcerts)
ルートCAに至るまでの証明書チェインを確認してみます。depth=2がルートCA、depth=1が中間CA、depth=0がwww.example.comのサーバ証明書になります。
[root@server ~]# openssl s_client -connect www.example.com:443 -showcerts CONNECTED(00000003) depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA verify return:1 depth=1 C = US, O = DigiCert Inc, CN = DigiCert TLS RSA SHA256 2020 CA1 verify return:1 depth=0 C = US, ST = California, L = Los Angeles, O = "Verizon Digital Media Services, Inc.", CN = www.example.org verify return:1 --- Certificate chain 0 s:/C=US/ST=California/L=Los Angeles/O=Verizon Digital Media Services, Inc./CN=www.example.org i:/C=US/O=DigiCert Inc/CN=DigiCert TLS RSA SHA256 2020 CA1 -----BEGIN CERTIFICATE----- MIIHNjCCBh6gAwIBAgIQAlIW4cSZjiYyql0dqYW0PDANBgkqhkiG9w0BAQsFADBP MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMSkwJwYDVQQDEyBE aWdpQ2VydCBUTFMgUlNBIFNIQTI1NiAyMDIwIENBMTAeFw0yMTEyMTAwMDAwMDBa Fw0yMjEyMDkyMzU5NTlaMIGBMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZv cm5pYTEUMBIGA1UEBxMLTG9zIEFuZ2VsZXMxLTArBgNVBAoTJFZlcml6b24gRGln aXRhbCBNZWRpYSBTZXJ2aWNlcywgSW5jLjEYMBYGA1UEAxMPd3d3LmV4YW1wbGUu b3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoDBCVtcLoRG58wvs zPJMsG8TAmvPB/OF8EKPxVSYgW56kzi2+kZCs1zmyTtZk2EkQyD1eonJd63/h8gI 24b13GF1ll/c8AjKOrleD/o3fGVqyggnHp3YCj+eENtFJZoDcrr1J9mw6zbUkzmM EWxfMxRY5cCIxR96IRTM0qdfHHMf2QMgbnoI7xdO474owE/gcWMhBHePj0sr6Aui vpd+UG+4Ozdjf6QMmf+WosN/ynwhuv2Q0T8FpDRw1oSOpQDcKXz9lstDrjmPLcat 2MIdm+RfnFGci/5tSWJbx80eGJbOxioHt3GAYHKsVxIAkEMPI76pcHHW5XuFo00F iCHHIwIDAQABo4ID2TCCA9UwHwYDVR0jBBgwFoAUt2ui6qiqhIx56rTaD5iyxZV2 ufQwHQYDVR0OBBYEFG3g+qTIbys3Dg1NyBKa0QeBaGBEMIGBBgNVHREEejB4gg93 d3cuZXhhbXBsZS5vcmeCC2V4YW1wbGUubmV0ggtleGFtcGxlLmVkdYILZXhhbXBs ZS5jb22CC2V4YW1wbGUub3Jngg93d3cuZXhhbXBsZS5jb22CD3d3dy5leGFtcGxl LmVkdYIPd3d3LmV4YW1wbGUubmV0MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAU BggrBgEFBQcDAQYIKwYBBQUHAwIwgY8GA1UdHwSBhzCBhDBAoD6gPIY6aHR0cDov L2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VExTUlNBU0hBMjU2MjAyMENBMS00 LmNybDBAoD6gPIY6aHR0cDovL2NybDQuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VExT UlNBU0hBMjU2MjAyMENBMS00LmNybDA+BgNVHSAENzA1MDMGBmeBDAECAjApMCcG CCsGAQUFBwIBFhtodHRwOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwfwYIKwYBBQUH AQEEczBxMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wSQYI KwYBBQUHMAKGPWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRM U1JTQVNIQTI1NjIwMjBDQTEtMS5jcnQwDAYDVR0TAQH/BAIwADCCAX0GCisGAQQB 1nkCBAIEggFtBIIBaQFnAHYARqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+ bUcAAAF9osbrcAAABAMARzBFAiEA5RwolQhRMWvTnyCNwRK/v/mG2S9Df0gRhXWK pJuhG+YCIENHIK5yyKs3fLL9nlO9ckl5b9xbo8K3FP+N+keoBB+ZAHUAQcjKsd8i RkoQxqE6CUKHXk4xixsD6+tLx2jwkGKWBvYAAAF9osbrPAAABAMARjBEAiB7M05v Xh19tt1EbNsZEqb7/PrJRfeMOLz1O1UTOKCH1gIgf4nU/wBGtMERQuxeebdmf3wz +5Q0pOgf2rEi4a016SUAdgDfpV6raIJPH2yt7rhfTj5a6s2iEqRqXo47EsAgRFwq cwAAAX2ixut2AAAEAwBHMEUCIQDQjMsK3kzqSnGNY9Y5k0bLwo2/YN/2F0oaqXXi NdOjJAIgFw06n1b8M6QdD98zAsRR4e52c0O7YzvrJXfRSE3JnfowDQYJKoZIhvcN AQELBQADggEBAKVUNGn++wNr8agdWjZ5WY9cYqJjmQTQY3g5VkQMNaJiXIivehDU TcFPqtfimTlVlVrfLGxYRAOZrzkGoQjUf99IKJW4ZUOQ0WDsKoaowU1qfzpGTwbr jzmed2HbLlTP8NjQpYPMEIIiRQUC1iUK+0lf0UOq5mLJ3Cq3yL9UbOyhYTX9ha05 c5/nZHvhwCNvyie5RT6jWLcMH69hPS2DGiVr8HG4iV1W1F3/X+HeBOsEo1YyYlII SCHB72Cijki2QiAHzPqy71H9MDt9jH2jbYKVRIDRJ20eF2Y1+rk7qQjwLoBM44Af W9N7n6eEuv2HEWnaVBymoUjHaSEzYydzVOg= -----END CERTIFICATE----- 1 s:/C=US/O=DigiCert Inc/CN=DigiCert TLS RSA SHA256 2020 CA1 i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA -----BEGIN CERTIFICATE----- MIIEvjCCA6agAwIBAgIQBtjZBNVYQ0b2ii+nVCJ+xDANBgkqhkiG9w0BAQsFADBh MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD QTAeFw0yMTA0MTQwMDAwMDBaFw0zMTA0MTMyMzU5NTlaME8xCzAJBgNVBAYTAlVT MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxKTAnBgNVBAMTIERpZ2lDZXJ0IFRMUyBS U0EgU0hBMjU2IDIwMjAgQ0ExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEAwUuzZUdwvN1PWNvsnO3DZuUfMRNUrUpmRh8sCuxkB+Uu3Ny5CiDt3+PE0J6a qXodgojlEVbbHp9YwlHnLDQNLtKS4VbL8Xlfs7uHyiUDe5pSQWYQYE9XE0nw6Ddn g9/n00tnTCJRpt8OmRDtV1F0JuJ9x8piLhMbfyOIJVNvwTRYAIuE//i+p1hJInuW raKImxW8oHzf6VGo1bDtN+I2tIJLYrVJmuzHZ9bjPvXj1hJeRPG/cUJ9WIQDgLGB Afr5yjK7tI4nhyfFK3TUqNaX3sNk+crOU6JWvHgXjkkDKa77SU+kFbnO8lwZV21r eacroicgE7XQPUDTITAHk+qZ9QIDAQABo4IBgjCCAX4wEgYDVR0TAQH/BAgwBgEB /wIBADAdBgNVHQ4EFgQUt2ui6qiqhIx56rTaD5iyxZV2ufQwHwYDVR0jBBgwFoAU A95QNVbRTLtm8KPiGxvDl7I90VUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQG CCsGAQUFBwMBBggrBgEFBQcDAjB2BggrBgEFBQcBAQRqMGgwJAYIKwYBBQUHMAGG GGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBABggrBgEFBQcwAoY0aHR0cDovL2Nh Y2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0R2xvYmFsUm9vdENBLmNydDBCBgNV HR8EOzA5MDegNaAzhjFodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRH bG9iYWxSb290Q0EuY3JsMD0GA1UdIAQ2MDQwCwYJYIZIAYb9bAIBMAcGBWeBDAEB MAgGBmeBDAECATAIBgZngQwBAgIwCAYGZ4EMAQIDMA0GCSqGSIb3DQEBCwUAA4IB AQCAMs5eC91uWg0Kr+HWhMvAjvqFcO3aXbMM9yt1QP6FCvrzMXi3cEsaiVi6gL3z ax3pfs8LulicWdSQ0/1s/dCYbbdxglvPbQtaCdB73sRD2Cqk3p5BJl+7j5nL3a7h qG+fh/50tx8bIKuxT8b1Z11dmzzp/2n3YWzW2fP9NsarA4h20ksudYbj/NhVfSbC EXffPgK2fPOre3qGNm+499iTcc+G33Mw+nur7SpZyEKEOxEXGlLzyQ4UfaJbcme6 ce1XR2bFuAJKZTRei9AqPCCcUZlM51Ke92sRKw2Sfh3oius2FkOH6ipjv3U/697E A7sKPPcw7+uvTPyLNhBzPvOk -----END CERTIFICATE----- --- Server certificate subject=/C=US/ST=California/L=Los Angeles/O=Verizon Digital Media Services, Inc./CN=www.example.org issuer=/C=US/O=DigiCert Inc/CN=DigiCert TLS RSA SHA256 2020 CA1 --- No client certificate CA names sent Peer signing digest: SHA256 Server Temp Key: ECDH, P-256, 256 bits --- SSL handshake has read 3725 bytes and written 415 bytes --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES128-GCM-SHA256 Session-ID: 3F0C124E4F8E03F4005DA7574CAEE7A74613472F92B6A82857BAA4E9C4EC88EC Session-ID-ctx: Master-Key: 2B8F77CDF6C7A22E93BBD8CD9B65A8BE04144217BBD788080AE1F7E3DB95B362DC1278E888C3BEDFFF583176E42CA2CA Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None TLS session ticket lifetime hint: 7200 (seconds) TLS session ticket: 0000 - 17 8a d9 8c 72 ee 2c f7-f4 22 77 33 97 5b 00 7c ....r.,.."w3.[.| 0010 - a6 c4 81 d2 7d 8b 8a 1f-a0 68 04 47 9f 9e 14 c6 ....}....h.G.... 0020 - b9 89 03 7c 74 cb 8d c2-4d a1 69 54 5a 1f 43 49 ...|t...M.iTZ.CI 0030 - e8 29 c3 63 d2 67 7c 65-b0 5f 26 46 84 f7 e6 59 .).c.g|e._&F...Y 0040 - e8 65 24 a4 3f 85 c2 f4-a4 03 87 f3 4c 69 b7 67 .e$.?.......Li.g 0050 - 2d eb 29 39 c8 28 a6 9d-f8 fb 4f 47 28 5e bd 11 -.)9.(....OG(^.. 0060 - e4 a2 ce ac 97 e4 17 6a-d0 e8 36 d1 3f 59 19 0b .......j..6.?Y.. 0070 - 73 b4 c3 a8 68 bd 2e 49-bf 61 82 4c 9e 8d 6a d5 s...h..I.a.L..j. 0080 - d4 77 61 87 b5 5b 66 da-b3 b7 62 15 2a 24 46 fb .wa..[f...b.*$F. 0090 - 22 ea 0d 50 dd 7e f0 30-ed 43 b6 e1 ca c3 09 f5 "..P.~.0.C...... Start Time: 1643195011 Timeout : 300 (sec) Verify return code: 0 (ok) --- ^C
6.6 簡潔に表示する方法(-quiet)
quietオプションを使うと、証明書チェインだけが表示されます。
[root@server ~]# openssl s_client -connect www.example.com:443 -quiet depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA verify return:1 depth=1 C = US, O = DigiCert Inc, CN = DigiCert TLS RSA SHA256 2020 CA1 verify return:1 depth=0 C = US, ST = California, L = Los Angeles, O = "Verizon Digital Media Services, Inc.", CN = www.example.org verify return:1 ^C
6.7 TLSメッセージのやりとりを表示する方法(-msg)
msgオプションを使うと、TLSサーバとクライアントでやりとりするメッセージを表示することができます。ただし、msgオプションだけだと、メッセージが見にくいので、grepで絞り込みをしてみました。grepで絞り込んだ左端は、以下の意味になります。
[root@server ~]# openssl s_client -connect www.example.com:443 -msg |grep -e ">>>" -e "<<<" >>> TLS 1.2 [length 0005] >>> TLS 1.2 Handshake [length 011c], ClientHello <<< ??? [length 0005] <<< TLS 1.2 Handshake [length 003d], ServerHello <<< ??? [length 0005] <<< TLS 1.2 Handshake [length 0c09], Certificate depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA verify return:1 depth=1 C = US, O = DigiCert Inc, CN = DigiCert TLS RSA SHA256 2020 CA1 verify return:1 depth=0 C = US, ST = California, L = Los Angeles, O = "Verizon Digital Media Services, Inc.", CN = www.example.org verify return:1 <<< ??? [length 0005] <<< TLS 1.2 Handshake [length 014d], ServerKeyExchange <<< ??? [length 0005] <<< TLS 1.2 Handshake [length 0004], ServerHelloDone >>> ??? [length 0005] >>> TLS 1.2 Handshake [length 0046], ClientKeyExchange >>> ??? [length 0005] >>> TLS 1.2 ChangeCipherSpec [length 0001] >>> ??? [length 0005] >>> TLS 1.2 Handshake [length 0010], Finished <<< ??? [length 0005] <<< TLS 1.2 Handshake [length 00aa]??? <<< ??? [length 0005] <<< TLS 1.2 ChangeCipherSpec [length 0001] <<< ??? [length 0005] <<< TLS 1.2 Handshake [length 0010], Finished ^C
6.8 サーバ証明書をファイルに保存する方法
サーバ(www.example.com)がクライアントに送信するサーバ証明書をファイルに保存してみます。
[root@server ~]# openssl s_client -connect www.example.com:443 -showcerts < /dev/null 2>/dev/null| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'> example.pem
ファイルに保存したサーバ証明書を確認します。
[root@server ~]# cat example.pem -----BEGIN CERTIFICATE----- MIIHNjCCBh6gAwIBAgIQAlIW4cSZjiYyql0dqYW0PDANBgkqhkiG9w0BAQsFADBP MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMSkwJwYDVQQDEyBE aWdpQ2VydCBUTFMgUlNBIFNIQTI1NiAyMDIwIENBMTAeFw0yMTEyMTAwMDAwMDBa Fw0yMjEyMDkyMzU5NTlaMIGBMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZv cm5pYTEUMBIGA1UEBxMLTG9zIEFuZ2VsZXMxLTArBgNVBAoTJFZlcml6b24gRGln aXRhbCBNZWRpYSBTZXJ2aWNlcywgSW5jLjEYMBYGA1UEAxMPd3d3LmV4YW1wbGUu b3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoDBCVtcLoRG58wvs zPJMsG8TAmvPB/OF8EKPxVSYgW56kzi2+kZCs1zmyTtZk2EkQyD1eonJd63/h8gI 24b13GF1ll/c8AjKOrleD/o3fGVqyggnHp3YCj+eENtFJZoDcrr1J9mw6zbUkzmM EWxfMxRY5cCIxR96IRTM0qdfHHMf2QMgbnoI7xdO474owE/gcWMhBHePj0sr6Aui vpd+UG+4Ozdjf6QMmf+WosN/ynwhuv2Q0T8FpDRw1oSOpQDcKXz9lstDrjmPLcat 2MIdm+RfnFGci/5tSWJbx80eGJbOxioHt3GAYHKsVxIAkEMPI76pcHHW5XuFo00F iCHHIwIDAQABo4ID2TCCA9UwHwYDVR0jBBgwFoAUt2ui6qiqhIx56rTaD5iyxZV2 ufQwHQYDVR0OBBYEFG3g+qTIbys3Dg1NyBKa0QeBaGBEMIGBBgNVHREEejB4gg93 d3cuZXhhbXBsZS5vcmeCC2V4YW1wbGUubmV0ggtleGFtcGxlLmVkdYILZXhhbXBs ZS5jb22CC2V4YW1wbGUub3Jngg93d3cuZXhhbXBsZS5jb22CD3d3dy5leGFtcGxl LmVkdYIPd3d3LmV4YW1wbGUubmV0MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAU BggrBgEFBQcDAQYIKwYBBQUHAwIwgY8GA1UdHwSBhzCBhDBAoD6gPIY6aHR0cDov L2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VExTUlNBU0hBMjU2MjAyMENBMS00 LmNybDBAoD6gPIY6aHR0cDovL2NybDQuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VExT UlNBU0hBMjU2MjAyMENBMS00LmNybDA+BgNVHSAENzA1MDMGBmeBDAECAjApMCcG CCsGAQUFBwIBFhtodHRwOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwfwYIKwYBBQUH AQEEczBxMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wSQYI KwYBBQUHMAKGPWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRM U1JTQVNIQTI1NjIwMjBDQTEtMS5jcnQwDAYDVR0TAQH/BAIwADCCAX0GCisGAQQB 1nkCBAIEggFtBIIBaQFnAHYARqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+ bUcAAAF9osbrcAAABAMARzBFAiEA5RwolQhRMWvTnyCNwRK/v/mG2S9Df0gRhXWK pJuhG+YCIENHIK5yyKs3fLL9nlO9ckl5b9xbo8K3FP+N+keoBB+ZAHUAQcjKsd8i RkoQxqE6CUKHXk4xixsD6+tLx2jwkGKWBvYAAAF9osbrPAAABAMARjBEAiB7M05v Xh19tt1EbNsZEqb7/PrJRfeMOLz1O1UTOKCH1gIgf4nU/wBGtMERQuxeebdmf3wz +5Q0pOgf2rEi4a016SUAdgDfpV6raIJPH2yt7rhfTj5a6s2iEqRqXo47EsAgRFwq cwAAAX2ixut2AAAEAwBHMEUCIQDQjMsK3kzqSnGNY9Y5k0bLwo2/YN/2F0oaqXXi NdOjJAIgFw06n1b8M6QdD98zAsRR4e52c0O7YzvrJXfRSE3JnfowDQYJKoZIhvcN AQELBQADggEBAKVUNGn++wNr8agdWjZ5WY9cYqJjmQTQY3g5VkQMNaJiXIivehDU TcFPqtfimTlVlVrfLGxYRAOZrzkGoQjUf99IKJW4ZUOQ0WDsKoaowU1qfzpGTwbr jzmed2HbLlTP8NjQpYPMEIIiRQUC1iUK+0lf0UOq5mLJ3Cq3yL9UbOyhYTX9ha05 c5/nZHvhwCNvyie5RT6jWLcMH69hPS2DGiVr8HG4iV1W1F3/X+HeBOsEo1YyYlII SCHB72Cijki2QiAHzPqy71H9MDt9jH2jbYKVRIDRJ20eF2Y1+rk7qQjwLoBM44Af W9N7n6eEuv2HEWnaVBymoUjHaSEzYydzVOg= -----END CERTIFICATE----- -snip-
fileコマンドでサーバ証明書のファイル形式を確認をします。PEM形式であることがわかります。なお、PEMファイルの判定処理は/usr/share/magicに記述されています。
[root@server ~]# file example.pem example.pem: PEM certificate
7 s_serverコマンドの使い方
s_serverは、TLSサーバとして動作するコマンドです。
[root@server ~]# man s_server S_SERVER(1) OpenSSL S_SERVER(1) NAME s_server - SSL/TLS server program
7.1 事前準備(秘密鍵、サーバ証明書の作成)
事前準備として、秘密鍵とサーバ証明書を作成します。まず、秘密鍵(private.key)を作成します。
[root@server ~]# openssl genrsa -out private.key 2048 Generating RSA private key, 2048 bit long modulus .......................................................+++ ........................................+++ e is 65537 (0x10001)
秘密鍵をもとに証明書署名要求(server.csr)を作成します。
[root@server ~]# openssl req -new -key private.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) [XX]: State or Province Name (full name) []: Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:server ★ホスト名を入力 Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
自身の秘密鍵(private.key)を使って、証明書署名要求に対して署名をします。サーバ証明書は、server.crtというファイル名で作成されます。
[root@server ~]# openssl x509 -req -in server.csr -signkey private.key -out server.crt [Signature ok subject=/C=XX/L=Default City/O=Default Company Ltd/CN=server Getting Private key
作成したファイルを確認します。ファイルは、それぞれ、以下のとおりです。
・private.key:秘密鍵
・server.csr:証明書署名要求
・server.crt:サーバ証明書
[root@server ~]# ls private.key server.csr server.crt
7.2 基本的な使い方
サーバ証明書(server.crt)と秘密鍵(private.key)を指定してTLSサーバを起動します。
[root@server ~]# openssl s_server -cert server.crt -key private.key Using default temp DH parameters ACCEPT
lsof コマンドを使って、opensslプロセスがListenしているポート番号を確認します。4433番ポートでListenしていることがわかります。
lsofコマンドの使い方は、lsofコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# lsof -c openssl -a -i -a -n -a -P COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME openssl 5951 root 3u IPv6 77553 0t0 TCP *:4433 (LISTEN)
クライアントからTLSサーバに接続するため、サーバの4433番ポートを開放します。firewall-cmdの詳細な使い方は、firewall-cmdの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# firewall-cmd --add-port=4433/tcp success [root@server ~]# firewall-cmd --list-ports 4433/tcp
クライアントからTLSサーバに接続してみます。接続先ポート番号は4433ポートを指定します。
[root@client ~]# openssl s_client -connect 192.168.2.100:4433 CONNECTED(00000003) depth=0 C = XX, L = Default City, O = Default Company Ltd, CN = server verify error:num=18:self signed certificate verify return:1 depth=0 C = XX, L = Default City, O = Default Company Ltd, CN = server verify return:1 --- Certificate chain 0 s:/C=XX/L=Default City/O=Default Company Ltd/CN=server i:/C=XX/L=Default City/O=Default Company Ltd/CN=server --- Server certificate -----BEGIN CERTIFICATE----- MIIDIjCCAgoCCQCkyuumDadbhzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJY WDEVMBMGA1UEBwwMRGVmYXVsdCBDaXR5MRwwGgYDVQQKDBNEZWZhdWx0IENvbXBh bnkgTHRkMQ8wDQYDVQQDDAZzZXJ2ZXIwHhcNMjIwMTI2MTMyMzE2WhcNMjIwMjI1 MTMyMzE2WjBTMQswCQYDVQQGEwJYWDEVMBMGA1UEBwwMRGVmYXVsdCBDaXR5MRww GgYDVQQKDBNEZWZhdWx0IENvbXBhbnkgTHRkMQ8wDQYDVQQDDAZzZXJ2ZXIwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDX0FI9oAXqvMDr0QmaWvJJdsBW nUcKpd9KXK6oZgPoOFvztIkDors22dZKZeAI04C2EpTd1+Xd33PGTT4iT5fQNTPY rtqE/O49qbUBFHu5f2953MmTA/GUyQQ9nXKIRNllcrdfxs2wix3QVJEGTIo/ChDC 81EJfIlm4xVduP8V6/N3zzbn86Utt5WSWqfm4Uh2mz+nv24tj7z5y/M2jH5cmL8K kvsxPvB3TScJCVmgfZH5n2Ow2MuTASD7Kht3xmRnZlhdM6wB1F1B1iBcHH8odiXN Xc7XdRQLzGpV/8IWhL+kOyECIh35oXaqEfWgS+qI3cv+pCYexAqXhbOfm2TjAgMB AAEwDQYJKoZIhvcNAQELBQADggEBAGEJUido2sKMNRHZGilbf7XHwtbhMGSGgm88 TLUCQfRh6Mm+TqBhW76tDYQM9KzG/MzWgx/X53sTMhuqWZW6s/LtYrjs/OuMk+1l V7nl3yrwy9hC2UGCgNIRmLxfM/HQ89Aq5r2jRd6RREDhCmlqkEquQtgjJ1As8REI kpm1zWhvcepoQRw2VH7KEB3DyQDYyeznajBV5Q24gw1csP7MLQ7QQ37ZRg6vYArG HByxHYokY7/uI0KDAwkVFaEQuq8JKDI6ggL6ablgHjs6J7nHCUWXT7eefURN5Him m6O58aC41tDKnuG5z3lLHBFVgRdngW/qeYydxDQOF5tGOyTS4gE= -----END CERTIFICATE----- subject=/C=XX/L=Default City/O=Default Company Ltd/CN=server issuer=/C=XX/L=Default City/O=Default Company Ltd/CN=server --- No client certificate CA names sent Peer signing digest: SHA512 Server Temp Key: ECDH, P-256, 256 bits --- SSL handshake has read 1465 bytes and written 415 bytes --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES256-GCM-SHA384 Session-ID: E62F37263DC4ABCC106BD3CBF7AF3192AD2DA200A572908CB9B846F9E1FE3CD2 Session-ID-ctx: Master-Key: 64582D4DA6F9571C8A622397C977D875A17E6161CDD7337EBCD01A8DF3BCCE304D06A3B06D4E4C7B1DF7318DF144FA4D Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None TLS session ticket lifetime hint: 300 (seconds) TLS session ticket: 0000 - 52 2d 3b 1d ab 5f 1a b6-1f 8f 9a 63 32 bd 27 64 R-;.._.....c2.'d 0010 - 16 a3 ca a1 71 4a 12 fc-6b 1c 0d 35 ba 6f f1 c4 ....qJ..k..5.o.. 0020 - 7a 5e 6e c8 60 3f 45 aa-b7 f0 00 43 d6 12 45 8b z^n.`?E....C..E. 0030 - cb ad d4 36 56 18 82 a9-2e 30 b7 14 81 a4 c0 a1 ...6V....0...... 0040 - 10 39 dd ec 36 b3 17 b9-e9 c9 ab 7f 93 73 d3 b3 .9..6........s.. 0050 - 3e a6 f8 46 92 fe 97 09-cf 34 cc 7e 89 9c c2 95 >..F.....4.~.... 0060 - 0c ea 9a 50 ff a1 b9 6c-57 4d 4f 68 11 3c c4 35 ...P...lWMOh.<.5 0070 - d8 a0 94 0d de 73 2d ae-b0 03 54 f7 e0 dd c0 23 .....s-...T....# 0080 - 51 cd 66 99 23 1b b7 71-b0 52 3d 10 a7 31 53 c3 Q.f.#..q.R=..1S. 0090 - 87 c4 38 93 ec 50 e2 8d-2d 33 b3 aa 9d dd 89 cd ..8..P..-3...... Start Time: 1643203901 Timeout : 300 (sec) Verify return code: 18 (self signed certificate) --- ^C
7.3 指定したポート番号でListenする方法(-accept)
opensslサーバが、デフォルトの4433番ポートではなく、11111番ポートでListenしてみます。
[root@server ~]# openssl s_server -accept 11111 -cert server.crt -key private.key Using default temp DH parameters ACCEPT
TCPの11111番ポートを開放します。
[root@server ~]# firewall-cmd --add-port=11111/tcp success
ポートの状態を確認します。TCPの11111番ポートが開放されたことがわかります。
[root@server ~]# firewall-cmd --list-ports 11111/tcp
lsofコマンドを実行します。opensslプロセスがTCPの11111番ポートでLISTENしていることがわかります。
[root@server ~]# lsof -c openssl -a -i -a -P COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME openssl 2877 root 3u IPv6 42565 0t0 TCP *:11111 (LISTEN)
クライアントからサーバに接続します。
[root@client ~]# openssl s_client -connect server:11111 CONNECTED(00000003) depth=0 C = XX, L = Default City, O = Default Company Ltd, CN = server verify error:num=18:self signed certificate verify return:1 depth=0 C = XX, L = Default City, O = Default Company Ltd, CN = server verify return:1 --- Certificate chain 0 s:/C=XX/L=Default City/O=Default Company Ltd/CN=server i:/C=XX/L=Default City/O=Default Company Ltd/CN=server --- Server certificate -----BEGIN CERTIFICATE----- MIIDIjCCAgoCCQCkyuumDadbhzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJY WDEVMBMGA1UEBwwMRGVmYXVsdCBDaXR5MRwwGgYDVQQKDBNEZWZhdWx0IENvbXBh bnkgTHRkMQ8wDQYDVQQDDAZzZXJ2ZXIwHhcNMjIwMTI2MTMyMzE2WhcNMjIwMjI1 MTMyMzE2WjBTMQswCQYDVQQGEwJYWDEVMBMGA1UEBwwMRGVmYXVsdCBDaXR5MRww GgYDVQQKDBNEZWZhdWx0IENvbXBhbnkgTHRkMQ8wDQYDVQQDDAZzZXJ2ZXIwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDX0FI9oAXqvMDr0QmaWvJJdsBW nUcKpd9KXK6oZgPoOFvztIkDors22dZKZeAI04C2EpTd1+Xd33PGTT4iT5fQNTPY rtqE/O49qbUBFHu5f2953MmTA/GUyQQ9nXKIRNllcrdfxs2wix3QVJEGTIo/ChDC 81EJfIlm4xVduP8V6/N3zzbn86Utt5WSWqfm4Uh2mz+nv24tj7z5y/M2jH5cmL8K kvsxPvB3TScJCVmgfZH5n2Ow2MuTASD7Kht3xmRnZlhdM6wB1F1B1iBcHH8odiXN Xc7XdRQLzGpV/8IWhL+kOyECIh35oXaqEfWgS+qI3cv+pCYexAqXhbOfm2TjAgMB AAEwDQYJKoZIhvcNAQELBQADggEBAGEJUido2sKMNRHZGilbf7XHwtbhMGSGgm88 TLUCQfRh6Mm+TqBhW76tDYQM9KzG/MzWgx/X53sTMhuqWZW6s/LtYrjs/OuMk+1l V7nl3yrwy9hC2UGCgNIRmLxfM/HQ89Aq5r2jRd6RREDhCmlqkEquQtgjJ1As8REI kpm1zWhvcepoQRw2VH7KEB3DyQDYyeznajBV5Q24gw1csP7MLQ7QQ37ZRg6vYArG HByxHYokY7/uI0KDAwkVFaEQuq8JKDI6ggL6ablgHjs6J7nHCUWXT7eefURN5Him m6O58aC41tDKnuG5z3lLHBFVgRdngW/qeYydxDQOF5tGOyTS4gE= -----END CERTIFICATE----- subject=/C=XX/L=Default City/O=Default Company Ltd/CN=server issuer=/C=XX/L=Default City/O=Default Company Ltd/CN=server --- No client certificate CA names sent Peer signing digest: SHA512 Server Temp Key: ECDH, P-256, 256 bits --- SSL handshake has read 1465 bytes and written 415 bytes --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES256-GCM-SHA384 Session-ID: 736407887795E0B201B217A302523392A6663D2B6C8AE79CEE49416DC51BC985 Session-ID-ctx: Master-Key: B0C632137E56067450C33F18E23D37870ADA03F32881C74A16E9C72198E0759CD6EF6316801CD906EDD59F811DD25DC3 Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None TLS session ticket lifetime hint: 300 (seconds) TLS session ticket: 0000 - ef 2d e5 d3 6e ab de de-23 34 b9 a6 95 bc aa 76 .-..n...#4.....v 0010 - 89 f6 75 8a 5c 98 17 e5-1a 2b bb 0c f6 76 04 be ..u.\....+...v.. 0020 - b8 83 23 55 9c b1 84 87-e4 5c d0 34 e4 21 fb ce ..#U.....\.4.!.. 0030 - ca cb 0a d3 0d 31 b9 a3-9e 17 97 bc d6 f1 2e c4 .....1.......... 0040 - 62 af 91 44 50 47 08 7e-59 9e cc 88 74 f6 1a cc b..DPG.~Y...t... 0050 - 21 ea 9a 6d 27 ca 62 0a-ba 45 22 46 bd 6a 9c 62 !..m'.b..E"F.j.b 0060 - 68 95 9a fd ab fc b9 b4-fc b7 b6 0c c5 24 df a0 h............$.. 0070 - 74 de a3 5f c7 62 5d 3f-bf c3 04 35 30 5a 58 09 t.._.b]?...50ZX. 0080 - 55 cc 81 ec 43 73 67 15-96 d2 24 ec 56 82 90 99 U...Csg...$.V... 0090 - 12 e4 b9 b2 6d e5 c8 c0-27 2b c1 ee ff 17 c3 e5 ....m...'+...... Start Time: 1643286509 Timeout : 300 (sec) Verify return code: 18 (self signed certificate) ---
7.4 WWWサーバとして動作させる方法(-WWW)
テスト用のhtmlファイルを作成します。
[root@server ~]# vi index.html [root@server ~]# cat index.html Hello World
[root@server ~]# ls server.crt private.key private.key server.crt
WWWオプションを指定して、webサーバとして起動します。
[root@server ~]# openssl s_server -accept 443 -cert server.crt -key private.key -WWW Using default temp DH parameters ACCEPT
curlコマンドを使ってwebサーバにアクセスします。webサーバより"Hello World"を受信していることがわかります。
[root@client ~]# curl -k https://192.168.2.100:443/index.html Hello World
8 X509コマンドの使い方
X.509は、公開鍵証明書を管理するコマンドです。
[root@server ~]# man x509 X509(1) OpenSSL X509(1) NAME x509 - Certificate display and signing utility
8.1 サーバ証明書の各種情報を表示する方法
事前準備として、www.example.comからサーバ証明書をダウンロードします。
[root@server ~]# openssl s_client -connect www.example.com:443 -showcerts < /dev/null 2>/dev/null| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'> example.pem
ダウンロードしたサーバ証明書のファイルタイプを確認してみます。
[root@server ~]# file example.pem example.pem: PEM certificate
サーバ証明書を確認してみます。
[root@server ~]# openssl x509 -in example.pem -noout -text Certificate: Data: Version: 3 (0x2) Serial Number: 02:52:16:e1:c4:99:8e:26:32:aa:5d:1d:a9:85:b4:3c Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, O=DigiCert Inc, CN=DigiCert TLS RSA SHA256 2020 CA1 Validity Not Before: Dec 10 00:00:00 2021 GMT Not After : Dec 9 23:59:59 2022 GMT Subject: C=US, ST=California, L=Los Angeles, O=Verizon Digital Media Services, Inc., CN=www.example.org Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:a0:30:42:56:d7:0b:a1:11:b9:f3:0b:ec:cc:f2: 4c:b0:6f:13:02:6b:cf:07:f3:85:f0:42:8f:c5:54: 98:81:6e:7a:93:38:b6:fa:46:42:b3:5c:e6:c9:3b: 59:93:61:24:43:20:f5:7a:89:c9:77:ad:ff:87:c8: 08:db:86:f5:dc:61:75:96:5f:dc:f0:08:ca:3a:b9: 5e:0f:fa:37:7c:65:6a:ca:08:27:1e:9d:d8:0a:3f: 9e:10:db:45:25:9a:03:72:ba:f5:27:d9:b0:eb:36: d4:93:39:8c:11:6c:5f:33:14:58:e5:c0:88:c5:1f: 7a:21:14:cc:d2:a7:5f:1c:73:1f:d9:03:20:6e:7a: 08:ef:17:4e:e3:be:28:c0:4f:e0:71:63:21:04:77: 8f:8f:4b:2b:e8:0b:a2:be:97:7e:50:6f:b8:3b:37: 63:7f:a4:0c:99:ff:96:a2:c3:7f:ca:7c:21:ba:fd: 90:d1:3f:05:a4:34:70:d6:84:8e:a5:00:dc:29:7c: fd:96:cb:43:ae:39:8f:2d:c6:ad:d8:c2:1d:9b:e4: 5f:9c:51:9c:8b:fe:6d:49:62:5b:c7:cd:1e:18:96: ce:c6:2a:07:b7:71:80:60:72:ac:57:12:00:90:43: 0f:23:be:a9:70:71:d6:e5:7b:85:a3:4d:05:88:21: c7:23 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Authority Key Identifier: keyid:B7:6B:A2:EA:A8:AA:84:8C:79:EA:B4:DA:0F:98:B2:C5:95:76:B9:F4 X509v3 Subject Key Identifier: 6D:E0:FA:A4:C8:6F:2B:37:0E:0D:4D:C8:12:9A:D1:07:81:68:60:44 X509v3 Subject Alternative Name: DNS:www.example.org, DNS:example.net, DNS:example.edu, DNS:example.com, DNS:example.org, DNS:www.example.com, DNS:www.example.edu, DNS:www.example.net X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication X509v3 CRL Distribution Points: Full Name: URI:http://crl3.digicert.com/DigiCertTLSRSASHA2562020CA1-4.crl Full Name: URI:http://crl4.digicert.com/DigiCertTLSRSASHA2562020CA1-4.crl X509v3 Certificate Policies: Policy: 2.23.140.1.2.2 CPS: http://www.digicert.com/CPS Authority Information Access: OCSP - URI:http://ocsp.digicert.com CA Issuers - URI:http://cacerts.digicert.com/DigiCertTLSRSASHA2562020CA1-1.crt X509v3 Basic Constraints: critical CA:FALSE CT Precertificate SCTs: Signed Certificate Timestamp: Version : v1(0) Log ID : 46:A5:55:EB:75:FA:91:20:30:B5:A2:89:69:F4:F3:7D: 11:2C:41:74:BE:FD:49:B8:85:AB:F2:FC:70:FE:6D:47 Timestamp : Dec 10 05:18:05.168 2021 GMT Extensions: none Signature : ecdsa-with-SHA256 30:45:02:21:00:E5:1C:28:95:08:51:31:6B:D3:9F:20: 8D:C1:12:BF:BF:F9:86:D9:2F:43:7F:48:11:85:75:8A: A4:9B:A1:1B:E6:02:20:43:47:20:AE:72:C8:AB:37:7C: B2:FD:9E:53:BD:72:49:79:6F:DC:5B:A3:C2:B7:14:FF: 8D:FA:47:A8:04:1F:99 Signed Certificate Timestamp: Version : v1(0) Log ID : 41:C8:CA:B1:DF:22:46:4A:10:C6:A1:3A:09:42:87:5E: 4E:31:8B:1B:03:EB:EB:4B:C7:68:F0:90:62:96:06:F6 Timestamp : Dec 10 05:18:05.116 2021 GMT Extensions: none Signature : ecdsa-with-SHA256 30:44:02:20:7B:33:4E:6F:5E:1D:7D:B6:DD:44:6C:DB: 19:12:A6:FB:FC:FA:C9:45:F7:8C:38:BC:F5:3B:55:13: 38:A0:87:D6:02:20:7F:89:D4:FF:00:46:B4:C1:11:42: EC:5E:79:B7:66:7F:7C:33:FB:94:34:A4:E8:1F:DA:B1: 22:E1:AD:35:E9:25 Signed Certificate Timestamp: Version : v1(0) Log ID : DF:A5:5E:AB:68:82:4F:1F:6C:AD:EE:B8:5F:4E:3E:5A: EA:CD:A2:12:A4:6A:5E:8E:3B:12:C0:20:44:5C:2A:73 Timestamp : Dec 10 05:18:05.174 2021 GMT Extensions: none Signature : ecdsa-with-SHA256 30:45:02:21:00:D0:8C:CB:0A:DE:4C:EA:4A:71:8D:63: D6:39:93:46:CB:C2:8D:BF:60:DF:F6:17:4A:1A:A9:75: E2:35:D3:A3:24:02:20:17:0D:3A:9F:56:FC:33:A4:1D: 0F:DF:33:02:C4:51:E1:EE:76:73:43:BB:63:3B:EB:25: 77:D1:48:4D:C9:9D:FA Signature Algorithm: sha256WithRSAEncryption a5:54:34:69:fe:fb:03:6b:f1:a8:1d:5a:36:79:59:8f:5c:62: a2:63:99:04:d0:63:78:39:56:44:0c:35:a2:62:5c:88:af:7a: 10:d4:4d:c1:4f:aa:d7:e2:99:39:55:95:5a:df:2c:6c:58:44: 03:99:af:39:06:a1:08:d4:7f:df:48:28:95:b8:65:43:90:d1: 60:ec:2a:86:a8:c1:4d:6a:7f:3a:46:4f:06:eb:8f:39:9e:77: 61:db:2e:54:cf:f0:d8:d0:a5:83:cc:10:82:22:45:05:02:d6: 25:0a:fb:49:5f:d1:43:aa:e6:62:c9:dc:2a:b7:c8:bf:54:6c: ec:a1:61:35:fd:85:ad:39:73:9f:e7:64:7b:e1:c0:23:6f:ca: 27:b9:45:3e:a3:58:b7:0c:1f:af:61:3d:2d:83:1a:25:6b:f0: 71:b8:89:5d:56:d4:5d:ff:5f:e1:de:04:eb:04:a3:56:32:62: 52:08:48:21:c1:ef:60:a2:8e:48:b6:42:20:07:cc:fa:b2:ef: 51:fd:30:3b:7d:8c:7d:a3:6d:82:95:44:80:d1:27:6d:1e:17: 66:35:fa:b9:3b:a9:08:f0:2e:80:4c:e3:80:1f:5b:d3:7b:9f: a7:84:ba:fd:87:11:69:da:54:1c:a6:a1:48:c7:69:21:33:63: 27:73:54:e8
サーバ証明書に登録されている、国名(C)、組織名(O)、コモン名(CN)等のサブジェクトを確認してみます。
[root@server ~]# openssl x509 -in example.pem -noout -subject subject= /C=US/ST=California/L=Los Angeles/O=Verizon Digital Media Services, Inc./CN=www.example.org
シリアル番号を確認してみます。
[root@server ~]# openssl x509 -in example.pem -noout -serial serial=025216E1C4998E2632AA5D1DA985B43C
www.example.orgのサーバ証明書を発行した中間CAの情報を確認してみます。DigiCertという中間CAがサーバ証明書の発行元であることがわかります
[root@server ~]# openssl x509 -in example.pem -noout -issuer issuer= /C=US/O=DigiCert Inc/CN=DigiCert TLS RSA SHA256 2020 CA1
OCSP(Online Certificate Status Protocol)は、X.509公開鍵証明書の失効状態を取得するための通信プロトコルです。
[root@server ~]# openssl x509 -in example.pem -noout -ocsp_uri http://ocsp.digicert.com
証明書から公開鍵を取り出してみます。
[root@server ~]# openssl x509 -in example.pem -noout -pubkey -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoDBCVtcLoRG58wvszPJM sG8TAmvPB/OF8EKPxVSYgW56kzi2+kZCs1zmyTtZk2EkQyD1eonJd63/h8gI24b1 3GF1ll/c8AjKOrleD/o3fGVqyggnHp3YCj+eENtFJZoDcrr1J9mw6zbUkzmMEWxf MxRY5cCIxR96IRTM0qdfHHMf2QMgbnoI7xdO474owE/gcWMhBHePj0sr6Auivpd+ UG+4Ozdjf6QMmf+WosN/ynwhuv2Q0T8FpDRw1oSOpQDcKXz9lstDrjmPLcat2MId m+RfnFGci/5tSWJbx80eGJbOxioHt3GAYHKsVxIAkEMPI76pcHHW5XuFo00FiCHH IwIDAQAB -----END PUBLIC KEY-----
8.2 PEM形式のサーバ証明書を作成する方法(-outform PEM)
秘密鍵(private.key)を作成します。
[root@server ~]# openssl genrsa -out private.key 2048 Generating RSA private key, 2048 bit long modulus ..............................+++ ...................................................................+++ e is 65537 (0x10001)
秘密鍵をもとに証明書署名要求(server.csr)を作成します。
[root@server ~]# openssl req -new -key private.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) [XX]: State or Province Name (full name) []: Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:server Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
PEM形式でサーバ証明書(server.crt)を作成します。outオプションで生成するファイル名を指定します。PEM形式であることがわかるように、拡張子をpemにしました。
[root@server ~]# openssl x509 -req -in server.csr -signkey private.key -out server.pem -outform PEM Signature ok subject=/C=XX/L=Default City/O=Default Company Ltd/CN=server Getting Private key
ファイルタイプを確認します。PEM形式であることがわかります。
[root@server ~]# file server.pem server.pem: PEM certificate
8.3 DER形式のサーバ証明書を作成する方法(-outform DER)
DER形式でサーバ証明書(server.der)を生成します。outオプションで生成するファイル名を指定します。DER形式であることがわかるように、拡張子をderにしました。
[root@server ~]# openssl x509 -req -in server.csr -signkey private.key -out server.der -outform DER Signature ok subject=/C=XX/L=Default City/O=Default Company Ltd/CN=server Getting Private key
ファイルタイプを確認します。
[root@server ~]# file server.der server.der: data
8.4 DER形式からPEM形式に変換する方法(-inform,-outform)
ファイルタイプを確認します。
[root@server ~]# file server.der server.der: data
DER形式からPEM形式に変換します。
[root@server ~]# openssl x509 -in server.der -inform DER -out server.pem -outform PEM
ファイルタイプを確認します。PEM形式に変換されたことがわかります。
[root@server ~]# file server.pem server.pem: PEM certificate
9 ciphersコマンドの使い方
ciphersコマンドは、暗号スイートを表示するコマンドです。暗号スイートとは、暗号アルゴリズムやハッシュ関数、鍵長などの組み合わせのことで、IETF で規格化されています。
[root@server ~]# man ciphers CIPHERS(1) OpenSSL CIPHERS(1) NAME ciphers - SSL cipher display and cipher list tool.
暗号スイートを表示してみます。
[root@server ~]# openssl ciphers -v ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384 ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384 -snip-
10 dgstコマンドの使い方
dgstコマンドは、メッセージダイジェストを計算するときに使います。メッセージダイジェストとは、ハッシュ関数が生成する値です。
[root@server ~]# man dgst DGST(1) OpenSSL DGST(1) NAME dgst, sha, sha1, mdc2, ripemd160, sha224, sha256, sha384, sha512, md2, md4, md5, dss1 - message digests -snip-
テスト用のファイルを作成します。fallocateコマンドの使い方は、ファイルの作り方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# fallocate -l 1K test.dat
作成したテストファイルを確認します。
[root@server ~]# ls -lh test.dat -rw-------. 1 root root 184M 1月 27 22:30 test.dat
sha512コマンドを使って、テスト用ファイルのダイジェストを計算してみます。
[root@server ~]# openssl dgst -sha512 test.dat SHA512(test.dat)= f864bc9a82147b542d2334a1072a050e79ec7ede1d8818258686b201ffc2a45eab8a92243f996d83b71065f8e17a7e3a805840618779e87de641470ac206dd33
11 rsautlコマンドの使いかた
rsautlコマンドを使って、公開鍵で暗号化したファイルを秘密鍵で復号してみます。
[root@server ~]# man rsautl RSAUTL(1) OpenSSL RSAUTL(1) NAME rsautl - RSA utility -snip-
11.1 事前準備
テスト用のファイルを作成します。
[root@server ~]# echo "1234567890" > test.txt
作成したファイルを確認します。
[root@server ~]# cat test.txt 1234567890
2048ビットのRSA秘密鍵を作成します。ここでは、作成した秘密鍵の暗号化はしません。
[root@server ~]# openssl genrsa -out priv.key 2048 Generating RSA private key, 2048 bit long modulus ...........+++ .............................................+++ e is 65537 (0x10001)
作成した秘密鍵のファイルタイプを確認します。
[root@server ~]# file priv.key priv.key: PEM RSA private key
[root@server ~]# openssl rsa -in priv.key -pubout -out pub.key writing RSA key
[root@server ~]# cat pub.key -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1v301jCzsJjWzivUoFYE yQZJNLsKZfoyYBx2SFemeZHs+fQqjxmr73bEBrJOzbnDxmAsacuqeYC46cnfOlMe P8wKxoowjQ8lnUUJ9p+qkqECIce2aTnjcxmf/RdH75yKpnygDEE17HjV435MTBJ8 gQAd0v9hV4qaomNJKG3xPkFhgmy5mfpdGA3kYzA1Q5x7ygc/3Jt4UH4CBtird33g K4eXdsKI9XIFmhtjcbc1sOXyNIPsYLv+KthvHvZIH3/dhNX07B1XnW66GMxRwnAA OkSTUU6cSxZVTKcAuWuvIZvNIqc8MSWSeC5CLJLjxbPJtPNCdFyPpy7e7fhVScKL vQIDAQAB -----END PUBLIC KEY-----
11.2 暗号化および復号
作成した公開鍵を使って、テスト用ファイルを暗号化してみます。暗号化したファイルのファイル名は、test.txt.encになります。
[root@server ~]# openssl rsautl -encrypt -pubin -inkey pub.key -in test.txt -out test.txt.enc
暗号化したファイルを確認します。test.txt.encというファイルが作成できたことがわかります。
[root@server ~]# file test.txt.enc test.txt.enc: data
テスト用のファイルを削除します。
[root@server ~]# rm test.txt rm: 通常ファイル `test.txt' を削除しますか? y
ファイルを確認します。テスト用ファイルが削除されたことがわかります。
[root@server ~]# ls priv.key pub.key test.txt.enc
暗号化したファイルを復号します。復号するファイルのファイル名はtest.txtにします。
[root@server ~]# openssl rsautl -decrypt -inkey priv.key -in test.txt.enc -out test.txt
復号したファイルの内容を確認してみます。正しく復号できていることがわかります。
[root@server ~]# cat test.txt 1234567890
12 ブラウザで証明書を確認する方法
12.1 ルートCAまでの証明書チェインを確認する方法
首相官邸ホームページの証明書チェインを確認してみます。
ルートCAへの証明書チェインは、以下のようになっていました。
ブラウザに表示されたルートCAまでの証明書チェインは以下のとおりです。ルートCAのCN(Common Name)は"GlobalSign"となっていました。
CN=GlobalSign + CN=GlobalSign RSA OV SSL CA 2018 + CN=*.kantei.co.jp
12.2 ルートCA証明書を確認する方法
ブラウザにインストールされているルートCAの証明書を確認してみます。ここでは、"GlobalSign"のルートCAの証明書がインストールされていることを確認してみます。
13 opensslコマンドで証明書を確認する方法
首相官邸ホームページにアクセスした際、webサーバから送られてくる証明書の確認方法について説明します。
首相官邸のwebサーバにアクセスします。
[root@server ~]# openssl s_client -connect www.kantei.go.jp:443 -servername www.kantei.go.jp -showcerts < /dev/null
実行結果を以下に示します。説明に必要な部分だけを引用しています。0ではじまるところがサーバ証明書、1ではじまるところが中間CA証明書です。そして、i(issuer)は証明書の発行者、s(subject)は証明書を受け取る側を表します。首相官邸ホームページにアクセスすると、クライアントにサーバ証明書(下記0の証明書)、中間CA証明書(下記1の証明書)が送付されていることがわかります。
[root@server ~]# openssl s_client -connect www.kantei.go.jp:443 -servername www.kantei.go.jp -showcerts < /dev/null -snip- --- Certificate chain 0 s:/C=JP/ST=Tokyo/L=Chiyoda-ku/OU=Cabinet Public Relations Office/O=Cabinet Secretariat/CN=*.kantei.go.jp i:/C=BE/O=GlobalSign nv-sa/CN=GlobalSign RSA OV SSL CA 2018 -snip- 1 s:/C=BE/O=GlobalSign nv-sa/CN=GlobalSign RSA OV SSL CA 2018 i:/OU=GlobalSign Root CA - R3/O=GlobalSign/CN=GlobalSign -snip-
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ