SSL証明書:CSRの作成および確認

OpenSSL コマンドを用いて、Apache や Nginx で利用可能な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 コマンド