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.crtserver.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>のセクション内で既存のパラメーターを上記に変更する。

SSLCertificateFileSSLCertificateKeyFileで事前に用意した自己署名証明書と秘密鍵のパス指定が肝となる。

なお,ServerNamehttpd.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件のコメントがあります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です