OpenSSLを使って自己署名証明書を作成する
2017-02-06   Windows, Web

Windows用のOpenSSLを使って自己署名のサーバー証明書を作成していきます。

Windows用バイナリーをダウンロードする

以下のサイトからZIPファイルをダウンロードします。

32ビット版の場合、ファイル名 openssl-*-i386-win32.zip のようになっています。 2017年2月6日時点の最新バージョンは openssl-1.0.2k-i386-win32.zip でした。今回はこのバージョン 1.0.2k で説明を進めていきます。

適当な場所に openssl\bin というフォルダーを作成して、そこにダウンロードしたZIPファイルの中身を展開します。今回は E:\openssl\bin に展開しました。フォルダーの階層や名前は自由に決めてもらって構いませんが、最後のフォルダー名は必ず bin としてください。

既定の設定ファイルを作成する

ファイルを展開した場所(E:\openssl)に、openssl.cnf という名前のテキストファイルを作成して、内容を以下の通りにします。このファイルは以下のリンクからダウンロードすることもできます。

openssl.cnf
###################################################################### [ req ] default_bits = 2048 default_keyfile = privkey.pem distinguished_name = req_distinguished_name ###################################################################### [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = JP countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Not Applicable localityName = Locality Name (eg, city) localityName_default = Not Applicable 0.organizationName = Organization Name (eg, company) 0.organizationName_default = MY COMPANY organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName_default = commonName = Common Name (eg, your website’s domain name) commonName_max = 64 ###################################################################### [ server ] nsCertType=server extendedKeyUsage = serverAuth

25行目の MY COMPANY は自分の組織名に書き換えてください。

起動用バッチファイルを作成する

ファイルを展開した場所(E:\openssl)に、OpenSSL_Console.bat という名前のバッチファイルを作成して、内容を以下の通りにします。このファイルは以下のリンクからダウンロードすることもできます。

OpenSSL_Console.bat
@ECHO OFF SET PATH=%~dp0bin;%PATH% SET OPENSSL_CONF=%~dp0openssl.cnf @openssl version %COMSPEC% /K "cd /d %~dp0"

作業用コンソールを起動する

ここまでの作業でフォルダーは以下のような構成になっています。

OpenSSL_Console.bat をダブルクリックして起動します。OpenSSLのバージョンが表示されれば成功です。

秘密鍵を作成する

以下のコマンドを入力して秘密鍵を作成します。ここでは秘密鍵のファイル名を server.key としています。

openssl genrsa -out server.key

これで秘密鍵 server.key ができました。

ヒント
Apacheでの扱いやすさを考えて秘密鍵のファイル名を server.key としました。

証明書署名要求(CSR)を作成する

以下のコマンドを入力して証明書署名要求(CSR)を作成します。

openssl req -new -sha256 -key server.key -out server.csr

コンソールでの対話形式で作業を進めていきます。既定値として openssl.cnf に記載した内容が表示されるので、ほとんどの項目では Enter を押して進めていくことができます。

  • Country Name (国名)
  • State or Province Name (都道府県名)
  • Locality Name (eg, city) (市区町村名)
  • Organization Name (eg, company) (会社名)
  • Organization Unit Name (eg, section) (部署名)
  • Common Name (eg, your website’ s domain name)

最後の Common Name については既定値が表示されません。ここにはウェブサーバーのホスト名を入力します。

これで証明書署名要求 server.csr ができました。

自分で署名してサーバー証明書を作成する

以下のコマンドを入力してサーバー証明書を作成します。引数 -day で有効期間 7300日(約20年)を指定しています。

openssl x509 -req -in server.csr -signkey server.key -out server.crt -days 7300 -extensions server

これで、サーバー証明書 server.crt が出来上がりました。

Apache 2.4にサーバー証明書を配置する

最後に作成した自己署名サーバー証明書をApacheに配置してみます。

Apache Haus のバイナリーを使用している場合

Apache Hausで配布されているApacheを使用している場合は、 Apacheの conf\ssl フォルダーを開いて、ここに作成した server.crtserver.key を上書きコピーします。これでApacheを再起動すれば、サーバー証明書が有効になります。

その他のApacheバイナリーを使用している場合

Apacheの conf フォルダーに server.crtserver.key をコピーします。

conf\httpd.conf をテキスト・エディターで開いて以下の内容を編集します。

  • LoadModule ssl_module modules/mod_ssl.so がコメントアウトされている場合はコメントを外して有効化します。
  • Include conf/extra/httpd-ssl.conf がコメントアウトされている場合はコメントを外して有効化します。(この行自体が存在しない場合は追記してください。)

conf\extra\httpd-ssl.conf をテキスト・エディターで開いて以下の内容を編集します。

  • SSLCertificateFile "${SRVROOT}/conf/server.crt" がコメントアウトされている場合はコメントを外して有効化します。ファイル名が異なっている場合は実際に配置したサーバー証明書のファイル名に合わせてください。
  • SSLCertificateKeyFile "${SRVROOT}/conf/server.key" がコメントアウトされている場合はコメントを外して有効化します。ファイル名が異なっている場合は実際に配置したサーバー証明書のファイル名に合わせてください。

これで Apache を再起動すれば、サーバー証明書が有効になるはずです。