本稿では OpenSSL ライブラリを利用して SSL の自己証明書を発行する手順について解説します。
前提
本稿では次の条件に基づき手順を解説します。
- 公開鍵暗号方式 : RSA
- 秘密鍵長 : 2048bit
OpenSSL ライブラリのインストール
本稿では暗号鍵の作成に OpenSSL ライブラリを利用します、予めインストールしてください。 既にインストールされている場合でも、脆弱性のある OpenSSL を利用していては意味がないので、最新版のライブラリがインストールされているかを確認しましょう。
CentOS でインストールする場合
# yum -y install openssl
秘密鍵の作成
それでは1つずつ手順を解説していきます、まずは秘密鍵の作成です。 前述の通り、公開鍵暗号方式として RSA を利用するので、RSA 方式の秘密鍵を作成します。 作成には openssl genrsa
コマンドを利用します。 コマンドに鍵長を指定します、今回は 2048bit の秘密鍵を作成します。
$ openssl genrsa 2048 > server.key
これで server.key という名前の秘密鍵が記載されたファイルが作成されました。 なお、もっと詳しく秘密鍵の作成方法について知りたい場合は、別稿「OpenSSL で RSA の秘密鍵を作成する方法」も参考にしてください。
証明書署名要求(CSR / Certificate Signing Request)の作成
次に証明書署名要求を作成します。 証明書署名要求は、認証局にサーバの公開鍵に電子署名してもらうよう要求するメッセージです。 (本稿では自己証明書を作成する為、認証局も自分自身ということになります) OpenSSL で証明書署名要求を作成するには openssl req
コマンドを実行します。
コマンドを実行すると、証明書を発行して欲しいサーバの情報の入力を促されますので、サーバの情報を入力します。
$ openssl req -new -key server.key > server.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) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Minato-ku
Organization Name (eg, company) [Default Company Ltd]:OSCA
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:weblabo.oscasierra.net
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
これで証明書署名要求が記述された server.csr というファイルが作成されました。
サーバ証明書の作成
最後に本稿の成果物であるサーバ証明書を作成します。 普通であれば上で作成した証明書署名要求 (server.csr) を VeriSign などの機関に送付して認証局の秘密鍵で署名してもらいますが、本稿では自分で署名することでサーバ証明書を作成しますので上で作成した自分の秘密鍵 (server.key) で署名します。 サーバ証明書に署名するには openssl x509
コマンドを実行します。 今回は証明書の有効期限が10年(3650日)ある証明書を作成します。
$ openssl x509 -req -days 3650 -signkey server.key < server.csr > server.crt
Signature ok
subject=/C=JP/ST=Tokyo/L=Minato-ku/O=OSCA/CN=weblabo.oscasierra.net
Getting Private key
これでサーバ証明書が server.crt というファイル名で作成されました。 このファイルを WEB サーバなどに設定すれば HTTPS の通信ができるようになります。
WEBサーバへの設定
本稿では自己証明書を作成するまでの解説にとどめますが、Apache などへのサーバ証明書の設定は別稿をご覧ください。
おわりに
本稿では OpenSSL で自己証明書を発行する手順について解説しました。 秘密鍵と証明書署名要求からサーバ証明書を作る点について理解できましたでしょうか?