15. HTTPS通信の設定
この章では、Oracle Linux 8で、ApacheのHTTPS通信対応の設定について記述します。
参考書では、ceartbot-autoを使ったLet’s Encryptの無料証明書を使ったHTTPS通信(暗号化通信)の設定方法が書かれていますが、私の場合、問題が発生しました。それは、ブラウザで開くと、以下のような警告メッセージが表示されるものです。

これは、私の手順が悪かったのだろうと思いますが、この方法で取得した電子証明書が、自己署名証明書と呼ばれる形式であるために出る警告です。
電子証明書というのは、本来は厳格なものです。本人確認をキチンと行い、書類を提出するなどの手間がかかります。
自己署名証明書の場合は、発行者が自分自身になっているため、どこの認証局からも認証されていない証明書として扱われるため、不審な証明書として処理されて、上記のような警告が表示されます。この状態でも、”詳細設定”ボタンを押して警告を無視すれば閲覧できるのですが、一般公開するWebサーバーでこれはまずいでしょう。
このように思わぬ問題が発生することもありえますので、やはり、お金を払って正式な電子証明書を取得するのがおすすめです。
幸い昨今では、個人用の格安の電子証明書も販売されています。年間1500円程度で購入できるサイトはいくつかあるのですが、私はKingSSLというところで購入しました。かなり安く購入できるのに丁寧にサポートしていただいたので、私はこれからも継続して利用するつもりです。このお値段でサポートの安心がついてくるのであれば、かなりお得です。
以下に、KingSSLで電子証明書を購入した場合の注意点を簡単に書いておきます。
- 秘密鍵(privkey.pem、後述)は、購入前にopensslコマンドで作成したものを使います。ですので、作成後にきちんと保管しておいてください。
- メールに添付されている内容のうち、証明書と書かれている内容ががサーバー証明(cert.pem)になります。破線の部分も含めてテキストエディタで切り貼りして作ってください。中間証明書(chain.pem)は、そのまま中間証明書と書かれているものになります。
- 後述するメールサーバーの暗号化や、Apacheのバージョンが2.4.8以降の場合は、サーバー証明書と中間証明書が連結されたもの(fullchain.pem)が必要になります。このファイルは、そのままサーバー証明書と中間証明書の内容を並べただけです。テキストエディタなどで編集してください。なお、Apacheのバージョンは、httpd -vコマンドで見る事ができます。
以下に設定手順を説明します。まず、購入した電子証明書を、以下のようなファイル名にして保存し、www.example.netフォルダに保存します。なお、このファイル名は、無料の電子証明書をテスト用に提供してくれたLet’s Encryptに敬意を表し、そのファイル名に準拠しています。
種類 | ファイル名 |
---|---|
秘密鍵 | privkey.pem |
サーバー証明書 | cert.pem |
中間証明書 | chain.pem |
サーバー証明書+中間証明書 | fullchain.pem |
上記のファイルの入ったwww.example.netフォルダを、oluserのホームディレクトリに、WinSCPやRLoginを利用して転送します。以下、ホームディレクトリで作業します。
電子証明書を置くためのディレクトリを作成します。
sudo mkdir /etc/httpd/conf/keys
作ったディレクトリのパーミッション(許可属性)を変更します。
sudo chmod 700 /etc/httpd/conf/keys
転送してきた電子証明書のディレクトリをコピーします。
sudo cp -r www.example.net/ /etc/httpd/conf/keys/
コピーしたディレクトリのパーミッションを調整します。
sudo chmod 700 /etc/httpd/conf/keys/www.example.net
sudo chmod 400 /etc/httpd/conf/keys/www.example.net/*
続いて、セキュリティコンテキストを調整します。なお、セキュリティコンテキストの詳細は、参考書を見てください。
sudo chcon -R --reference=/etc/httpd/conf /etc/httpd/conf/keys
なお、-Rオプションを付けると、右で指定したディレクトリ以下の全てのファイルのセキュリティコンテキストを変更します。--referenceオプションは、=の右のファイルやディレクトリのものと同一のセキュリティコンテキストを設定するためのものです。
mod_sslをインストールします。
sudo dnf -y install mod_ssl
/etc/httpd/conf.d/ssl.confを編集します。
sudo vim /etc/httpd/conf.d/ssl.conf
85行目あたりを以下のように変更します。
変更前
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
変更後
#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateFile /etc/httpd/conf/keys/www.kumahachi.xyz/cert.pem
93行目あたりを以下のように変更します。
変更前
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
変更後
#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateKeyFile /etc/httpd/conf/keys/www.kumahachi.xyz/privkey.pem
102行目あたりを以下のように変更します。
変更前
#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
変更後
#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
SSLCertificateChainFile /etc/httpd/conf/keys/www.kumahachi.xyz/chain.pem
最終行に以下を追記します。
<VirtualHost *:443>
SSLEngine on
SSLProtocol -All +TLSv1.2 +TLSv1.3
SSLCipherSuite AES128+ECDHE:AES256+ECDHE:AES128+EDH:AES256+EDH:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4!CAMELLIA!AES128-SHA!AES128-SHA256!AES128-GCM-SHA256:!AES256-GCM-SHA384:!AES256-SHA256:!AES256-SHA!AES256-CCM8!AES256-CCM!AES128-CCM!ARIA128-GCM-SHA256!AES128-CCM8!ARIA256-GCM-SHA384
SSLHonorCipherOrder on
SSLCertificateKeyFile /etc/httpd/conf/keys/www.example.net/privkey.pem
SSLCertificateFile /etc/httpd/conf/keys/www.example.net/cert.pem
SSLCertificateChainFile /etc/httpd/conf/keys/www.example.net/chain.pem
</VirtualHost>
SSLProtocolの部分の設定は、TLSという規格の暗号化通信のバージョン1.2と1.3のみを許可するようにしています。SSLCipherSuiteの部分の設定は、弱すぎる暗号化強度のものを排除する設定です。この二つの部分は、古いブラウザにどうしても対応しなければならないのでなければ、このまま設定することをお勧めします。
なお、この部分の設定は、このサイトを参考にさせていただきました。管理人様には、最大級の感謝をささげます。
SSLCertificateKeyFileに秘密鍵のファイルをフルパスで指定し、後はそれぞれ、SSLCertificateFileがサーバー証明書、SSLCertificateChainFileが中間証明書となります。
/etc/httpd/conf.d/myvhost.confを新規作成します。
sudo vim /etc/httpd/conf.d/myvhost.conf
以下のように書き込んでください。
<VirtualHost *:80>
ServerName www.example.net
DocumentRoot "/var/www/http"
</VirtualHost>
この設定は、HTTP通信とHTTPS通信のホームディレクトリを分けるものです。この設定をしませんと、特にLet’s Encryptの電子証明書を取得したり失効させたりする場合に問題が発生することがありえますので、キチンと設定してください。
なお、HTTP通信のホームディレクトリが/var/www/http、HTTPS通信のホームディレクトリが/var/www/htmlとなります。
HTTP通信用のホームディレクトリを作成します。
sudo mkdir /var/www/http
作ったホームディレクトリのセキュリティコンテキストを調整します。
sudo chcon --reference=/var/www/html /var/www/http
前の章などを参考にして、適当なWebページのファイルを/var/www/httpディレクトリに用意してください。
ファイアーウォールにHTTPS通信を許可するように設定します。
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
Apacheを再起動します。
sudo systemctl restart httpd
最後に、ルーターの設定でHTTPSのポート(TCP:443番)を追加します。この設定は、前の章などを参考にしてください。
以上で設定作業は終わりです。ブラウザのURLに、http://www.example.netと指定したり、https://www.example.netと指定したりして確認してください。