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
ができました。
自分で署名してサーバー証明書を作成する
以下のコマンドを入力してサーバー証明書を作成します。引数 -days
で有効期間 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.crt
と server.key
を上書きコピーします。これで Apache を再起動すれば、 サーバー証明書が有効になります。
その他のApacheバイナリーを使用している場合
Apache の conf
フォルダーに server.crt
と server.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 を再起動すれば、 サーバー証明書が有効になるはずです。