OpenSSLは、秘密鍵の生成、CSRの作成、SSL/TLS証明書のインストール、証明書情報の特定などに広く利用されているオープンソースのコマンドラインツールです。このクイックリファレンスガイドは、OpenSSLの最も一般的なコマンドとその使い方を理解するのに役立ちます。
このガイドは包括的なものではありません。OpenSSLについてより深く包括的に知りたい場合は、Ivan Ristić著のOpenSSL Cookbookを参照することをお勧めします。
OpenSSL コマンドと CSR 生成の詳細を確認する時間がない場合、または時間を節約したい場合は、OpenSSL CSR Wizardを確認してください。
秘密鍵またはCSRを生成するための準備において、使用しているOpenSSLのバージョンを確認することは重要な第一歩です。OpenSSLのバージョンによって、鍵生成時に使用できる暗号化アルゴリズムとサポートされるプロトコルが決まります。例えば、OpenSSLバージョン1.0.1はTLS 1.1とTLS 1.2をサポートした最初のバージョンです。また、使用しているOpenSSLのバージョンを把握しておくことは、問題が発生した場合のトラブルシューティングのサポートを受ける際にも重要です。
実行しているOpenSSLのバージョンを確認するには、次のコマンドを使用します:
openssl version -a
このコマンドでは、-aスイッチにより、以下の完全なバージョン情報が表示されます。:
openssl version -aコマンドを使用すると、次の出力が生成されました。:
| OpenSSL 1.0.2g 1 Mar 2016 built on: reproducible build, date unspecified platform: debian-amd64 options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx) compiler: cc -I. -I.. -I../include -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS - D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -g -O2 -fstack-protector- strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,- Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DMD32_REG_T=int - DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 - DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM - DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM OPENSSLDIR: "/usr/lib/ssl" |
SSL証明書を取得するための最初のステップは、OpenSSLを使用して証明書署名要求(CSR)を作成し、証明機関(CA)(例:DigiCert)に送信することです。CSRには、証明書で保護する共通名(Common Name)、会社情報、公開鍵が含まれます。CSRを作成するには、公開鍵を抽出するための秘密鍵が必要です。これは、既存の秘密鍵を使用することも、新しい秘密鍵を生成することもできます。
キーを生成するときは、キー アルゴリズム、キー サイズ、パスフレーズを使用するかどうかの 3 つの点を決定する必要があります。
鍵アルゴリズム
鍵アルゴリズムについては、互換性を考慮する必要があります。そのため、RSAの使用をお勧めします。ただし、ECDSAなどの他のアルゴリズムを使用する必要がある場合は、そのアルゴリズムも使用できますが、互換性の問題が発生する可能性があることに注意してください。
鍵のサイズ
鍵サイズについては、RSAを使用する場合は少なくとも2048ビット、ECDSAを使用する場合は少なくとも256ビットの長さを選択する必要があります。これらはSSL証明書で許可されている最小の鍵サイズです。より大きな鍵サイズを使用する必要がない限り、RSAの場合は2048ビット、ECDSAの場合は256ビットのままにすることをお勧めします。
パスフレーズ
パスフレーズについては、使用するかどうかを決める必要があります。使用した場合、秘密鍵は指定された暗号化方式で暗号化され、パスフレーズなしでは使用できなくなります。どちらの方法にも長所と短所があるため、パスフレーズを使用する場合と使用しない場合の違いを理解することが重要です。このガイドでは、例としてパスフレーズを使用しません。
鍵アルゴリズム、鍵サイズ、パスフレーズを使用するかどうかを決定したら、秘密鍵を生成する準備が整います。
RSAアルゴリズムを使用して秘密鍵を生成するには、次のコマンドを使用します。:
openssl genrsa -out yourdomain.key 2048
このコマンドは、RSAアルゴリズム(genrsa)を使用し、鍵長2048ビット(2048)の秘密鍵を、現在のディレクトリにyourdomain.key(-out yourdomain.key)という名前で生成します。生成された鍵は、OpenSSLのPEM形式を使用して作成されます。
秘密鍵の生のエンコードされた内容(PEM形式)を表示するには、次のコマンドを使用します。:
cat yourdomain.key
ファイルの内容はランダムなテキストの塊のように見えるかもしれませんが、実際にはキーに関する重要な情報が含まれています。
秘密鍵をデコードしてその内容を表示するには、次のコマンドを使用します。:
openssl rsa -text -in yourdomain.key -noout
-noout スイッチは、秘密キーのエンコードされたバージョンの出力を省略します。
秘密鍵ファイルには秘密鍵と公開鍵の両方が含まれています。必要に応じて、秘密鍵ファイルから公開鍵を抽出できます。
公開鍵を抽出するには次のコマンドを使用します:
openssl rsa -in yourdomain.key -pubout -out yourdomain_public.key
秘密鍵を生成したら、CSRを作成する準備が整います。CSRはPEM形式で作成され、秘密鍵の公開鍵部分と、お客様(またはお客様の会社)に関する情報が含まれます。
新しく生成された秘密鍵を使用してCSRを作成するには、次のコマンドを使用します。:
openssl req -new -key yourdomain.key -out yourdomain.csr
コマンドを入力すると、一連の質問が表示されます。これらの質問への回答はCSRに埋め込まれます。
以下の質問に答えてください:
| 国名(2文字コード) | 会社の法的所在地を示す 2 文字の国コード。 |
| 都道府県名(フルネーム) | 会社が法的に所在する都道府県。 |
| 地域名(例:市) |
会社が法的に所在する都市。 |
| 組織名 | 会社の法的に登録された名前 (例: YourCompany, Inc.)。 |
| 組織単位名(例:部署) |
組織内の部署名。(オプションなので空白でも大丈夫です。Enter キーを押してください。) |
| コモンネーム(例:サーバーのFQDN) | 完全修飾ドメイン名 (FQDN) (例: www.example.com)。 |
| 電子メールアドレス |
メールアドレス。(オプションなので空白でも大丈夫です。Enter キーを押してください。) |
| チャレンジパスワード | このオプションは空白のままにします。(Enter キーを押してください。) |
| 任意の会社名 |
このオプションは空白のままにします。(Enter キーを押してください。) |
上記のCSR質問の一部には、回答を空白のままEnterキーを押すとデフォルト値が使用されます。これらのデフォルト値は、OPENSSLDIRにあるOpenSSL設定ファイルから取得されます(OpenSSLのバージョン確認を参照)。デフォルト値を使用せずに質問を空白のままにしたい場合は、「.」(ピリオド)を入力してEnterキーを押します。
CSR を作成するときのもう 1 つのオプションは、-subj スイッチを使用して、コマンド自体に必要な情報をすべて提供することです。
CSRを生成する際に質問プロンプトを無効にするには、次のコマンドを使用します。:
openssl req -new -key yourdomain.key -out yourdomain.csr \ -subj "/C=US/ST=Utah/L=Lehi/O=Your Company, Inc./OU=IT/CN=yourdomain.com"
このコマンドは、秘密鍵ファイル (-key yourdomain.key) を使用して新しい CSR (-out yourdomain.csr) を作成し、CSR 情報 (-subj) を指定して質問プロンプトを無効にします。
秘密鍵を生成してから CSR を 2 つの別々の手順で作成する代わりに、実際には両方のタスクを一度に実行できます。
秘密鍵とCSRの両方を作成するには、次のコマンドを使用します。:
openssl req -new \ -newkey rsa:2048 -nodes -keyout yourdomain.key \ -out yourdomain.csr \ -subj "/C=US/ST=Utah/L=Lehi/O=Your Company, Inc./OU=IT/CN=yourdomain.com"
このコマンドは、パスフレーズ (-nodes) を使用せずに、2048 ビットのキー長 (rsa:2048) の RSA アルゴリズムを使用して新しい秘密鍵 (-newkey) を生成し、yourdomain.key (-keyout yourdomain.key) という名前の鍵 ファイルを作成します。
次に、コマンドは yourdomain.csr というファイル名の CSR を生成し (-out yourdomain.csr)、CSR の情報を指定します (-subj)。
秘密鍵を使用して CSR を作成した後、CSR に含まれる情報が正しいこと、およびファイルが変更または破損していないことを確認することをお勧めします。
CSR を CA (DigiCert など) に送信する前に、次のコマンドを使用して CSR の情報を表示します。:
openssl req -text -in yourdomain.csr -noout -verify
-noout スイッチは、CSR のエンコード版の出力を省略します。-verify スイッチは、ファイルの署名が改ざんされていないことを確認します。
このコマンドを実行すると、次の出力が得られます。:
| verify OK Certificate Request: Data: Version: 0 (0x0) Subject: C=US, ST=Utah, L=Lehi, O=Your Company, Inc., OU=IT, CN=yourdomain.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:bb:31:71:40:81:2c:8e:fb:89:25:7c:0e:cb:76: [...17 lines removed] Exponent: 65537 (0x10001) Attributes: a0:00 Signature Algorithm: sha256WithRSAEncryption 0b:9b:23:b5:1f:8d:c9:cd:59:bf:b7:e5:11:ab:f0:e8:b9:f6: [...14 lines removed] |
上記の出力の1行目を見ると、CSRが検証されたこと(verify OK)がわかります。4行目のSubject:フィールドには、CSR作成時に入力した情報が含まれています。この情報が正しいことを確認してください。
情報に誤りがある場合は、エラーを修正するために全く新しいCSRを作成する必要があります。これは、CSRファイルがデジタル署名されているためです。つまり、ファイル内の文字を1文字でも変更すると、CAによって拒否されます。
CSR を CA (DigiCert など) に送信する準備ができたら、PEM 形式 (テキスト エディターで開いたときに表示される CSR の生のエンコードされたテキスト) を使用して送信する必要があります。
CSRの生の出力を表示するには、次のコマンドを使用します。:
cat yourdomain.csr
出力内容全体をコピーし ( -----BEGIN CERTIFICATE REQUEST----- から -----END CERTIFICATE REQUEST----- まで) DigiCert 注文フォームに貼り付けます。
CA(例:DigiCert)から証明書を受け取ったら、証明書の情報が正しく、秘密鍵と一致していることを確認することをお勧めします。これはx509コマンドを使用して行うことができます。
証明書の内容を表示するには、次のコマンドを使用します。:
openssl x509 -text -in yourdomain.crt -noout
公開鍵と秘密鍵が一致していることを確認するには、各ファイルから公開鍵を抽出し、ハッシュ出力を生成します。3つのファイルはすべて同じ公開鍵とハッシュ値を共有している必要があります。
次のコマンドを使用して、各ファイルの公開鍵のハッシュを生成します。:
openssl pkey -pubout -in .\private.key | openssl sha256
openssl req -pubkey -in .\request.csr -noout | openssl sha256
openssl x509 -pubkey -in .\certificate.crt -noout | openssl sha256
各コマンドは (stdin)= に続いて文字列を出力します。各コマンドの出力が一致する場合、各ファイルの鍵は同じです。ただし、不一致がある場合は鍵が一致していないため、証明書をインストールできません。
鍵不一致エラーは通常、CSR の生成に使用されたマシンとは異なるマシンに証明書をインストールすることによって発生します。
鍵不一致エラーが発生した場合は、次のいずれかを実行する必要があります。:
OpenSSL はデフォルトで PEM 形式で鍵と CSR を生成します。ただし、別のシステムにエクスポートするために、鍵または証明書を別の形式に変換する必要がある場合があります。
PEM to PKCS#12
PKCS#12形式は、証明書と秘密鍵の両方を保存するアーカイブファイルです。この形式は必要なファイルをすべて含んでいるため、証明書と鍵をあるシステムから別のシステムに移行するのに便利です。PKCS#12ファイルのファイル拡張子は.pfxまたは.p12です。
次のコマンドを使用して、PEM キーと証明書を PKCS#12 形式 (つまり、単一の .pfx ファイル) に変換します。:
openssl pkcs12 -export -name "yourdomain-digicert-(expiration date)" \ -out yourdomain.pfx -inkey yourdomain.key -in yourdomain.crt
このコマンドは、秘密鍵 (-inkey yourdomain.key) と証明書 (-in yourdomain.crt) を、フレンドリ名 (-name "yourdomain-digicert-(expiration date)") を持つ 1 つの .pfx ファイル (-out yourdomain.pfx) に結合します。expiration date は、証明書の有効期限です。
PKCS#12 to PEM
PKCS#12 形式には証明書と秘密鍵の両方が含まれているため、.pfx ファイルを PEM 形式に戻すには 2 つの別々のコマンドを使用する必要があります。
PKCS#12 (.pfx) ファイルから秘密鍵を抽出し、PEM でエンコードされた秘密鍵に変換するには、次のコマンドを使用します。:
openssl pkcs12 -in yourdomain.pfx -nocerts -out yourdomain.key -nodes
次のコマンドを使用して、PKCS#12 (.pfx) ファイルから証明書を抽出し、PEM エンコードされた証明書に変換します。:
openssl pkcs12 -in yourdomain.pfx -nokeys -clcerts -out yourdomain.crt
PEMからDERへ
DER形式は、証明書または鍵情報をASN.1エンコーディングで保存します。PEM形式と同様に、DERは鍵と証明書の情報を別々のファイルに保存し、通常は同じファイル拡張子(.key、.crt、.csr)を使用します。以下の例では、わかりやすくするためにファイル拡張子.derを使用しています。
次のコマンドを使用して、PEMエンコードされた証明書をDERエンコードされた証明書に変換します。:
openssl x509 -inform PEM -in yourdomain.crt -outform DER -out yourdomain.der
次のコマンドを使用して、PEMでエンコードされた秘密鍵をDERでエンコードされた秘密鍵に変換します。:
openssl rsa -inform PEM -in yourdomain.key -outform DER -out yourdomain_key.der
DERからPEMへ
DERエンコードされた証明書をPEMエンコードされた証明書に変換するには、次のコマンドを使用します。:
openssl x509 -inform DER -in yourdomain.der -outform PEM -out yourdomain.crt
DERエンコードされた秘密鍵をPEMエンコードされた秘密鍵に変換するには、次のコマンドを使用します。:
openssl rsa -inform DER -in yourdomain_key.der -outform PEM -out yourdomain.key