OpenSSL で SSL 自己証明書を発行する手順

投稿者 : OSCA

[PR] 関東地方の美しい夜景を観にいこう。 夜景サイト「夜景散歩」で夜景スポットを検索

 本稿では 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 で自己証明書を発行する手順について解説しました。 秘密鍵と証明書署名要求からサーバ証明書を作る点について理解できましたでしょうか?

OpenSSLのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca