Apache HTTP ServerでのHTTPSの設定方法
概要
Apache HTTP Serverを使うための設定をこれまでしてきた。ただ,現在のインターネットで一般的とされているSSL/TLSの設定をしてなかった。
Web関係のソフトのテストの実行時に,WebサーバーでHTTPSを必要とするものもあり,ApacheでのSSL/TLSによるHTTPSの設定が必要に思っていた。
その他,AWSなどのクラウドサービスで自分のWebアプリケーションをデプロイする際に,自分でHTTPSの設定をできるようになっておく必要があった。
そこで,ApacheでのHTTPSの設定方法を調べたので記す。
事前に以下の内容の設定を実施済みとする。
Apache HTTP Server 2.4.39で確認した。
自己署名証明書の作成
SSL/TLSによるHTTPSを実現するには,Webサーバーの公開鍵証明書と秘密鍵が必要になる。無料のLet’s Encryptを使ったり,有料の認証局を使って用意する方法もある。
今回は主にローカル環境でのHTTPSが目的のため,自己署名証明書を使う。「OpenSSLによる自己署名証明書の作成」に書いた内容を参考に,以下のコマンドでWebサーバーの自己署名証明書と秘密鍵を作成する。
cd $HOME/.local/etc/ssl/self
openssl req -x509 -days 36500 -nodes -newkey rsa:4096 -keyout server.key >server.crt -subj /C=
これで,SSL/TLSの通信に必要なserver.crt
とserver.key
が生成される。
httpd.conf
の設定
公式サイトの「SSL/TLS Strong Encryption: How-To – Apache HTTP Server Version 2.4」にApache HTTP ServerでのSSL/TLSによるHTTPS通信の設定方法が書かれている。
これによると,最低限以下の設定があればいい。
LoadModule ssl_module modules/mod_ssl.so
Listen 443
<VirtualHost *:443>
ServerName www.example.com
SSLEngine on
SSLCertificateFile "/path/to/www.example.com.cert"
SSLCertificateKeyFile "/path/to/www.example.com.key"
</VirtualHost>
Apacheをインストールしたときのデフォルトのhttpd.conf
にいくらかコメントアウトして設定が残っているので,それらを流用する。
具体的には,$HOME/.local/apache2/conf/httpd.conf
の以下のコメントアウトを解除する。
LoadModule ssl_module modules/mod_ssl.so # 130行目付近
# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf # 510行目付近
conf/extra/httpd-ssl.conf
にSSL/TLS関係の設定が分離されているので,今度はこちらのファイルを編集する。
まず,35行目付近のListenのポート番号が443で存在していることを確認できる。443はHTTPSの標準のポート番号となっており,OSのApacheなどと競合する可能性があるので,必要に応じて8443などに変更する。
#Listen 443
Listen 8443
続いて,ファイルの末尾に以下の内容を追記する。
<VirtualHost *:8443>
SSLEngine on
SSLCertificateFile "${HOME}/.local/etc/ssl/self/server.crt"
SSLCertificateKeyFile "${HOME}/.local/etc/ssl/self/server.key"
</VirtualHost>
あるいは,デフォルトの443ポートを使う場合,<VirtualHost _default_:443>
のセクション内で既存のパラメーターを上記に変更する。
SSLCertificateFile
とSSLCertificateKeyFile
で事前に用意した自己署名証明書と秘密鍵のパス指定が肝となる。
なお,ServerName
はhttpd.conf
で設定されているので,httpd-ssl.conf
での設定は不要となる。
以上でApacheでのSSL/TLSの設定は完了となる。
動作確認
設定を反映させるため,以下のコマンドを実行してサーバーを再起動する。
apachectl restart
この状態で,https://localhost:8443にWebブラウザーでアクセスすると,自己署名証明書を使っているためWebブラウザーが警告を出す可能性が高い。[Advanced] などを選んで進めると無事に表示できる。
念の為,以下のコマンドでもHTTPS通信ができていることを確認できる。
curl -k https://localhost:8443/
その他,「「HTTP/2通信されているか?」をブラウザで手軽に判別する方法」にあるように,Webブラウザーの機能でもHTTPS通信ができていることを確認できる。
結論
Apache HTTP ServerでのHTTPSの設定方法を記した。
今回の設定で,HTTP通信だけでなく一般的なWebサービスに必須とされるHTTPS通信をできるようになった。
設定自体は少なく,そこまで難しくなかった。証明書と秘密鍵の用意が一番の難所だった。証明書と秘密鍵さえ用意できれば,後はパス指定するだけでHTTPS化は可能となる。
今回は自己署名証明書を用いた。当然ながら,Web上に公開する際には自己署名証明書はWebブラウザーが警告を出すためよくない。
Let’s Encryptの証明書が個人レベルでは現実的なところだ。後日,Let’s Encryptでの証明書の発行方法を調べて,今回整理したApacheのHTTPS化の方法で実際にWeb上で自分のWebサービスをHTTPSで通信できるようにやってみたい。
“Apache HTTP ServerでのHTTPSの設定方法” に対して2件のコメントがあります。