OpenSSL コマンド

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