XAMPP for WindowsでSSLを有効にする

  • 3
    いいね
  • 0
    コメント

(2017-05-02追記) Chrome58でオレオレ証明書が認証されない問題に対処しました。

目標

  1. XAMPPで「https://localhost」を表示可能にします。
  2. 自作の証明書を認証して、警告を表示させないようにします。
    未認証: 002.png
    認証済: 007.png

環境

  • Windows 10
  • XAMPP 7.1.1

XAMPPの設定

PHPでOpenSSLを有効にする

C:\xampp\php\php.iniの下記の行のコメントアウトを外します。

php.ini
- ;extension=php_openssl.dll
+ extension=php_openssl.dll

ただし、私の環境ではファイル内に「extension=php_openssl.dll」が2箇所に記述されてして、一方はコメントアウトされていたものの、もう一方はすでに有効だったので何も修正する必要はありませんでした。

ApacheのSSL関連の設定を追加する

C:\xampp\apache\conf\extra\httpd-ssl.confの末尾に下記を追加します。

httpd-ssl.conf
<VirtualHost *:443>
    DocumentRoot "C:/xampp/htdocs"
    ServerName localhost
    SSLEngine on
    SSLCertificateFile "conf/ssl.crt/my-server.crt"
    SSLCertificateKeyFile "conf/ssl.key/my-server.key"
</VirtualHost>

my-server.crtmy-server.keyは後で作成します。
DocumentRoot,ServerNameは適宜読み替えてください。
なお、ServerNameをlocalhost以外、例えばwww.example.comなどにしたい場合は、別途バーチャルホストの設定と、hostsファイルの修正が必要です。

:link: windows7のXAMPPでバーチャルホストの設定をする – YATのBLOG hatena bookmark

動作確認

Apacheを再起動して、https://localhostへアクセスしてください。
下記のような警告が出るものの、強引に表示させることはできます。
次章では、この警告を表示させないようにします。

003.png

証明書

(修正: 2017-05-02)
以前の方法ではChrome58で認証されません。
非推奨とされてきた"Common Name (CN)"への対応が廃止されたので、"Subject Alternative Name (SAN)"という拡張領域が必要です。

:link: Chromeがコモンネームの設定を非推奨化、そのエラー対策としての自己署名証明書のCSRの作り方 hatena bookmark
:link: Support for commonName matching in Certificates - Chrome Platform Status hatena bookmark

以降の手順は下記の記事に従っています。
:link: Fixing Chrome 58 – NET::ERR_CERT_AUTHORITY_INVALID error – Dev Notes hatena bookmark

古い証明書を削除する

認証されなくなった古い証明書がある場合は削除します。

  1. Chromeの設定を開き、「証明書の管理...」をクリックします。
    検索欄で「SSL」と入力すると絞り込めます。
    ( chrome://settings/search#SSL )
  2. 信頼されたルート証明機関からlocalhostを削除します。
    003.png

OpenSSL設定ファイルを編集する

  1. C:\xampp\apache\conf\openssl.cnfをコピーして、ファイル名をopenssl-san.cnfに変更します。
  2. 以下を末尾に追記します。
openssl-san.cnf
[ SAN ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = localhost
DNS.2 = <他に認証したいドメインがあれば>
DNS.3 = <他に認証したいドメインがあれば>

SSLサーバ証明書を作成する

コマンドプロンプトではopensslコマンドを実行できないので、代わりにGit Bashを使います。

GitBash
# C:\xampp\apache\conf へ移動
$ cd /c/xampp/apache/conf

# my-server.crt, my-server.key の2つのファイルを生成
$ openssl req \
    -newkey     rsa:4096 \
    -keyout     my-server.key \
    -x509 \
    -nodes \
    -out        my-server.crt \
    -subj       "//CN=localhost" \
    -reqexts    SAN \
    -extensions SAN \
    -config     openssl-san.cnf \
    -days       3650

-subjオプションの書き方はGit Bashのみで有効です。

:link: string - Running Openssl from a bash script on windows - Subject does not start with '/' - Stack Overflow hatena bookmark

コマンドのオプションについては下記をご覧ください。
:link: (日本語)OpenSSL Manual Translation - req(1) hatena bookmark
:link: (英語)/docs/manmaster/man1/req.html hatena bookmark

証明書を設置する

それぞれ、下記の場所に移動します。

ファイル 設置場所
my-server.crt C:\xampp\apache\conf\ssl.crt
my-server.key C:\xampp\apache\conf\ssl.key

証明書を認証する

my-server.crtをダブルクリックします。

001.png

002.png

「証明書ストア」は、必ず「信頼されたルート証明機関」を選んでください。

003.png

004.png

「はい」を選んでインストールします。

005.png

動作確認

Apacheブラウザを再起動して、https://localhostへアクセスしてください。
一般的なHTTPSのサイトと同じように問題なく表示されるはずです。
ChromeだけでなくIEやEdgeでも同様です。ただしFirefoxだけは違います。

  • 未認証: 002.png
  • 認証済: 007.png

Firefoxでは

Firefoxではどんな自己署名証明書も認証されないようです。
例外として追加するほかないようです。

:link: 安全なウェブサイトでのエラーコード "SEC_ERROR_UNKNOWN_ISSUER" の問題解決 | Firefox ヘルプ hatena bookmark

例外に追加する

001.png

004.png

例外から削除する

005.png

006.png

参考記事

XAMPPの設定

証明書