OpenSSL コマンドを用いて、Apache や Nginx で利用可能なSSL証明書を申請するためのCSRを作成する方法について解説します。
Windows Server やネットワーク機器(SSL アクセラレータ)などでは、CSR の作成方法が異なる場合があります。
Windows Server やネットワーク機器(SSL アクセラレータ)などでは、CSR の作成方法が異なる場合があります。
SSL証明書の発行までの流れは、以下のようになります。
秘密鍵ファイルの作成
CSRファイルの作成
認証局への申請
SSL 証明書の設定
STEP1
●疑似乱数の生成
秘密鍵作成のための擬似乱数の情報を生成します。
$ openssl rand -base64 -out rand.dat 2048
●秘密鍵の生成
作成した擬似乱数ファイル(rand.dat)から、秘密鍵を作成します。
RSA 2048ビット、パスフレーズ無し。
$ openssl genrsa -rand rand.dat -out example.com.key 2048 2775 semi-random bytes loaded Generating RSA private key, 2048 bit long modulus ..........................+++++ .....+++++ e is 65537 (0x10001)
【例】鍵ファイルの内容
$ cat example.com.key -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAzzPsx7ADeXkG+BLB0nxbrKVNHhFYilS8mAtEgNkp6U6Sg9Uu nVR+Ugpjyp2c02y3wf8jFLPNa68311oIu/4HYU4SKpBYf8GVVn2u/g9RUwG0HBg9 <<中略>> qxP1G6LT9TDB4x5vFZ2RrNOkfR3EACKJWcQFt8i6ifAAfe8+vDacbotn0OZRvMDl CV2JAKkgDoPDblPYeyIEp08o+X8Mm/p57rkxf1HyH0RaIUR+2RAm -----END RSA PRIVATE KEY-----
RSA 2048ビット、パスフレーズ(AES128で暗号化)有り。
$ openssl genrsa -rand rand.dat -aes128 -out 2019_aes128.key 2048 2775 semi-random bytes loaded Generating RSA private key, 2048 bit long modulus ......................+++++ .........................+++++ e is 65537 (0x10001) Enter pass phrase for 2019_aes128.key: Verifying - Enter pass phrase for 2019_aes128.key:
※ パスフレーズは忘れないように。
【例】パスフレーズを設定した鍵ファイルの内容
$ cat 2019_aes128.key -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: AES-128-CBC,A9F750F9E05B79EDDF753E8C86DE4ADA jppbf6Gx3hj36rH4WMIlsvsvxtXeA9Kg5YjTqemA54xUyrj36XD4MNBXNJOMWaWh 3jYRGyIFzuyHQOkXK9yffoXhET0eQK9Z1ZykSePwmfzGwlCRULZHeQ+AcPYSlc86 <<中略>> e/QUgkQEUoTm0t0Zfhn6v0Q3+ZSnTnvPrhjZEg+pRKs6i1PFNTBHn4Bz2gYx323l 28atOQoGf/7lu/d2ros6jt3yustck3sfGXjJPN0U9bseyz6cFawR6WlonIzH1chM -----END RSA PRIVATE KEY-----
STEP2
●CSR の生成
ディスティングイッシュネーム(DN)情報を入力していきます。
$ openssl req -new -key example.com.key -out example.com.csr -sha256 ----- Country Name (2 letter code) [JP]:JP State or Province Name (full name) [TOKYO]:TOKYO Locality Name (eg, city) []:Shibuya-ku Organization Name (eg, company) [Internet Widgits Pty Ltd]:EXAMPLE Inc. Organizational Unit Name (eg, section) []:Web Sales Common Name (e.g. server FQDN or YOUR name) []:server.example.com Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
CSR作成時に入力する項目。
- 【Country Name (国名)】
半角大文字で JP。 - 【State or Province Name(都道府県名)】
都道府県名をローマ字表記で入力。 - 【Locality Name(市区町村名)】
市区町村名(都道府県の1つ下のレベル)をローマ字表記で入力。 - 【Organization Name(組織名)】
サーバ証明書の申請団体の組織名称(会社名・団体名)を英語表記で入力。 - 【Organizational Unit Name(部門名)】
部門名・部署名など、任意の判別文字列を入力。 - 【Common Name(コモンネーム)】
サーバ証明書を導入するサイトのURL(SSL接続の際のURL:FQDN)を入力。
入力する項目は、6項目です。これ以降の項目は、入力する必要はありません。
【例】CSRファイルの内容
-----BEGIN RSA PRIVATE KEY----- MIICvzCCAacCAQAwejELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBVRPS1lPMRMwEQYD VQQHDApTaGlodXlhLWt1MRUwEwYDVQQKDAxFWEFNUExFIEluYy4xEjAQBgNVBAsM <<中略>> HqPsvZGTIAXAepRFwjd0gGKbvhzkNRBq/A/1pFku9DZeidIWhdnuc76+I2EzwMlV AjFuK4leB0VGnQ9Ujb/bMa5oIxAXRmEzKQtjPpAC+9jAicE= -----END CERTIFICATE REQUEST-----
●CSRの内容の確認
$ openssl req -text -noout -in example.com.csr Certificate Request: Data: Version: 0 (0x0) Subject: C=JP, ST=TOKYO, L=Shibuya-ku, O=EXAMPLE Inc., OU=Web Sales, CN=server.example.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) <<以下、略>>
STEP3
●認証局へ申請
生成したCSRを利用して、認証局にSSLサーバ証明書の申請をします。
STEP4
●SSL証明書の設定
認証局から発行された SSL 証明書を Web サーバに設定します。
その際、「秘密鍵ファイル」および「認証局の中間証明書」が必要になります。
中間証明書は、SSL証明書の発行時に、認証局から指定されたものを利用します。
おまけ
●秘密鍵のパスフレーズの解除
Wevサービス(ApacheやNginx)を起動する度に毎回パスフレーズ入力を求められることになるのを避けるため、(セキュリティ的に弱くなるのを認識しつつ)秘密鍵のパスフレーズを削除しておくが一般的です。
$ openssl rsa -in [秘密鍵ファイル] -out [パスフレーズを解除した秘密鍵ファイル]
参考
[CSR生成] Apache 2.x + mod_ssl + OpenSSL(新規・更新)
CSRの作成 – さくらのサポート情報
OpenSSL コマンド