OpenSSLによるSSL証明書の発行の準備


概要

SSLの証明書を作るためには、安全に秘密鍵を生成し、その秘密鍵から作ったCSRを認証局に送って署名してもらわなければなりません。

opensslコマンドを使った秘密鍵とCSRの作り方をまとめました。

秘密鍵の生成

SSLの通信において、クライアントに送信するデータの暗号化、クライアントから受信したデータの復号に使用する暗号鍵です。

公開鍵を中に含むサーバ証明書とセットで使用します。

鍵長のみ指定、秘密鍵は暗号化しない

$ openssl genrsa -out privatekey.pem 2048

秘密鍵の暗号化方式に 3DES (トリプルDES)を使用

$ openssl genrsa -des3 -out privatekey.pem 2048
Enter pass phrase: secret ←秘密鍵の暗号化に使うパスフレーズ
Verifying - Enter pass phrase: secret

乱数生成器に /dev/random を、秘密鍵の暗号化方式に AES-256 を使用

$ openssl genrsa -aes256 -rand /dev/random -out privatekey.pem 2048
Enter pass phrase: secret ←秘密鍵の暗号化に使うパスフレーズ
Verifying - Enter pass phrase: secret

秘密鍵からパスフレーズを削除

$ openssl rsa -in privatekey.pem -out privatekey.pem
Enter pass phrase for privatekey.pem: secret ←設定したパスフレーズ
writing RSA key

CSRの生成

ディスティングイッシュネームを指定して、CSR(Certificate Signing Request = 証明書署名要求)を生成します。

このCSRを認証機関に送って署名してもらったものが証明書になります。

特に重要なのはCN(コモンネーム)。WebサーバのSSL証明書として使う場合はこれがホスト名になるので、ここを間違えるとhttpsで正常にアクセスできません。

更新時に秘密鍵やCSRを作り直す場合は、ディスティングイッシュネームを設定ファイルとして保存しておくと、手順を忘れた頃にやってくる次回の更新作業を安心して行うことができます。

証明書を設置する際には認証局のルート証明書や中間証明書をあわせて設定する必要がある場合があります。

対話方式

$ openssl req -new -key privatekey.pem -out certreq.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) [AU]: JP
State or Province Name (full name) [Some-State]: Ishikawa
Locality Name (eg, city) []: Kanazawa
Organization Name (eg, company) [Internet Widgits Pty Ltd]: DreamGarage Inc.
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []: www.dreamgarage.co.jp
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

オプションでディスティングイッシュネームを指定

$ openssl req -new -subj '/C=JP/ST=Ishikawa/L=Kanazawa/O=DreamGarage Inc./CN=www.dreamgarage.co.jp' -key privatekey.pem -out certreq.csr

設定ファイルでディスティングイッシュネームを指定

$ openssl req -new -config certreq.conf -key privatekey.pem -out certreq.csr
certreq.conf
[ req ]
distinguished_name     = req_distinguished_name
prompt                 = no

[ req_distinguished_name ]
C                      = JP
ST                     = Ishikawa
L                      = Kanazawa
O                      = DreamGarage Inc.
CN                     = www.dreamgarage.co.jp

CSRの内容を確認

CSRの生成で指定したディスティングイッシュネームを確認する方法です。

CSRの内容をすべて表示

$ openssl req -in certreq.csr -text

ディスティングイッシュネームを含む Subject を表示

$ openssl req -in certreq.csr -subject