OpenSSL は、Linux (CentOS、Ubuntu等) など近年の UNIX 系 OS では、既にインストールされていることが場合が多いと思います。
WindowsOS(Windows11、Windows10、Windows Server など)に関しては、別途、インストールする必要があります。
ここでは、OpenSSL で、個人的によく利用しているコマンドに関して記述しています。
鍵ファイル関連
秘密鍵の作成(パスフレーズ無し)
$ openssl genrsa 2048 -out <秘密鍵ファイル>
秘密鍵の作成(パスフレーズ有り:暗号化)
$ openssl genrsa 2048 -aes128 -out <秘密鍵ファイル>
※ 「-aes128」の他に、「-des3」や「-aes192」「-aes256」などの暗号化方式を指定可能。
※ OpenSSL のバージョンに依存。
秘密鍵のパスフレーズ(暗号化)の解除
$ openssl rsa -in <秘密鍵ファイル> -out <解除後の秘密鍵ファイル>
秘密鍵の作成(パスフレーズ無し)
楕円曲線暗号の場合。
$ openssl ecparam -name prime256v1 -genkey -out <秘密鍵ファイル>
証明書関連
CSRファイルの作成
$ openssl req -new -key <秘密鍵ファイル> -out <CSRファイル>
CSRファイルの内容を確認
$ openssl req -text -in <CSRファイル>
秘密鍵とCSRを一括で作成
$ openssl req -out <CSRファイル> -new -newkey rsa:2048 -nodes -keyout <秘密鍵ファイル>
SSLサーバ証明書の内容を確認
$ openssl x509 -inform pem -noout -text -in <サーバ証明書ファイル>
$ openssl x509 -inform pem -noout -text -in cert.pem Certificate: Data: Version: 1 (0x0) Serial Number: 90:6d:22:d2:6a:2d:a6:9d Signature Algorithm: sha256WithRSAEncryption Issuer: C=JP, ST=TOKYO, L=Shibuya-ku, O=EXAMPLE Inc., OU=Web Sales, CN=server.example.com Validity Not Before: Apr 28 07:59:59 2019 GMT Not After : Apr 25 07:59:59 2029 GMT <<以下、略>>
※ 一般的な認証局で発行された証明書とは出力内容が異なります。
SSLサーバ証明書の期限を確認
$ openssl x509 -noout -dates -in <サーバ証明書ファイル>
$ openssl x509 -noout -dates -in cert.pem notBefore=Apr 28 07:59:59 2019 GMT notAfter=Apr 25 07:59:59 2029 GMT
※ 一般的な認証局では期限は最長で2年間(27か月)で発行されます。
※ 一般的な認証局では期限は最長で1年間(397日 )で発行されます。
※ 2020年9月1日以降に発行される有効期間が398日を超える証明書は、ブラウザ(Chrome / Safari など)では無効となります。
SSLサーバ証明書ファイル使用者(Subject)を確認
$ openssl x509 -noout -subject -in <サーバ証明書ファイル>
$ openssl x509 -noout -subject -in cert.pem subject= /C=JP/ST=TOKYO/L=Shibuya-ku/O=EXAMPLE Inc./OU=Web Sales/CN=server.example.com $ openssl x509 -noout -subject -in cert.pem subject= /CN=www.home-page.xyz
※ 企業認証やEV認証の場合、CSR 作成時に入力した情報が出力されます。
※ ドメイン認証の場合、「CN(Common Name)」や「C(Country)」など、一部の情報が表示されます。
SSLサーバ証明書ファイルと秘密鍵の組み合わせが正しいことを確認
発行したSSLサーバ証明書と、秘密鍵ファイル、CSRの組み合わせが正しいことを確認できます。
組み合わせが正しい場合、以下のコマンドの出力結果が全て同じになります。
$ openssl rsa -noout -modulus -in <秘密鍵ファイル> | openssl md5 $ openssl req -noout -modulus -in <CSRファイル> | openssl md5 $ openssl x509 -noout -modulus -in <サーバ証明書ファイル> | openssl md5
$ openssl rsa -noout -modulus -in key.pem | openssl md5 (stdin)= c68e78d1142a8123d222d7282e6d4fea $ openssl req -noout -modulus -in csr.pem | openssl md5 (stdin)= c68e78d1142a8123d222d7282e6d4fea $ openssl x509 -noout -modulus -in cert.pem | openssl md5 (stdin)= c68e78d1142a8123d222d7282e6d4fea
証明書と秘密鍵の公開鍵が一致するかを確認する
$ openssl rsa -in <秘密鍵ファイル> -pubout -out <公開鍵ファイル1> $ openssl x509 -in <サーバ証明書ファイル> -pubkey -noout > <公開鍵ファイル2> $ diff <公開鍵ファイル1> <公開鍵ファイル2> && echo OK
そのほか
opensslのバージョン番号を確認
version を付ける。
$ openssl version OpenSSL 1.0.2u 20 Dec 2019
暗号スイート(認証・鍵交換・暗号化・MAC のアルゴリズム)の一覧を表示
$ openssl ciphers $ openssl ciphers -v
openssl 1.0.2の場合
openssl 1.1.1の場合
利用可能な楕円曲線の一覧
$ openssl ecparam -list_curves