どうも、タカフです。
Chrome68のアップデートに伴っていよいよ全サイトに対してSSL対応が極めて必須に近い状態になりました。
今となってはAWSやさくらサーバー等の各種レンタルサーバーで無料SSLが使えるようになり、またそうしたドキュメントも公式や個人ブログなどたくさん紹介されているので、リモートサーバーでは大分簡単にSSL証明書を入れられるようになりました。
しかしローカルのWebサーバーではちょいと手順が必要なので、本記事ではlocalhostをhttpsアクセスできる方法として備忘録を兼ねて記事にしたいと思います。
1. php_openssl.dllの有効化
sslを使う為のモジュールphp_opensslを有効化しておきましょう
;extension=php_openssl.dll
↓
extension=php_openssl.dll
2. openssl.cnfのコピー
以下のファイルを同じディレクトリにコピーします。
[xamppディレクトリ]apache\conf\openssl.cnf
↓コピー
[xamppディレクトリ]apache\conf\openssl-san.cnf
コピーしたらopenssl-san.cnfファイルをテキストエディタで開いてファイル最後に以下を追加します。
[ SAN ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = localhost
# 他に認証したいドメインがあれば以下に増やしていきます
#DNS.2 = local.my-site.com
#DNS.3 = local.my-blog.com
3. SSL証明書の発行
opensslコマンドがデフォルトで使えるgit bashのターミナルを使用します。インストールしてない人は、Git for Windows からインストールしてください。
インストール出来たらgit bashのターミナルを開いて以下のコマンドを打っていきます。
# apacheのconfディレクトリに移動
$ cd [xamppディレクトリ]/apache/conf/
# 証明書の発行
$ openssl req \
-newkey rsa:4096 \
-keyout my-localhost.key \
-x509 \
-nodes \
-out my-localhost.crt \
-subj "//CN=localhost" \
-reqexts SAN \
-extensions SAN \
-config openssl-san.cnf \
-days 3650
4. apacheのconfファイルに追記
<VirtualHost *:443>
ServerName localhost
DocumentRoot "[80ポートと同じDocumentRoot]"
SSLEngine on
SSLCertificateFile "conf/ssl.crt/my-localhost.crt"
SSLCertificateKeyFile "conf/ssl.key/my-localhost.key"
</VirtualHost>
5. 証明書のインストール
先程作ったmy-localhost.crtファイルをダブルクリックします。Windows標準の証明書がインストーラーが動くので、現在のユーザーで証明書をすべて次のストアに配置する にして、信頼されたルート証明機関でインストールを進めます。
ブラウザ確認
無事に自己証明書でlocalhostをSSL対応出来ました。
localhost以外にローカルサーバーへのドメインを増やしてそれもSSL化対応したい時は、2.で追記したopenssl-san.cnfにそのドメインを追記してapacheを再起動してやるだけで、追加可能です。
現場からは以上です。