Contents
1.Let’s Encryptとは!
Webサイトの開発などのために、ローカルネットワークに設置したサーバのSSL/TLSサーバ証明書を用意する場合、今までは自己証明書を発行して利用していました。
警告が出るなどの多少の不具合を気にしなければ自己証明書を利用することで事足りていたのですが、ブラウザ通知機能を使う際には、承認された認証局が発行した証明書であることが求められるため、自己証明書だけではエラーになってしまいます。自己認証局の証明書を各ブラウザにインストールするとエラーを回避することができるのですが、検証対象の全てのブラウザにインストールする必要があったり、スマホやタブレットの場合はインストールできないこともあります。
これらの事態を解消するには、有償のSSL/TLSサーバ証明書発行サービスを利用するしかありませんでした。
しかし最近では、Let’s Encryptによる無償のSSL/TLSサーバ証明書発行サービスが利用できるようになりました。今回はこのサービスを利用して、SSL/TLSサーバ証明書を取得してCentOS7.6に導入します。
2.Let’s Encryptのダウンロード
# curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto ← ダウンロード # chmod700 /usr/bin/certbot-auto ← アクセス権限の変更 |
3.事前確認
1)Apacheのモジュール「mod_ssl」が必要です。インストールされているかどうかを確認します
# https -M |
2)リストに「ssl_module (shared)」があれば問題なしですが、無い場合には以下のようにしてインストールします。
# yum -y install mod_ssl |
3)ファイアウォール設定でhttps用の443番ポート通過が許可されている必要があるので確認します。
# irewall-cmd –list-all … services: ssh http https |
「services」に「https」の記述があれば問題なし。
もし、まだ未設定の場合は次を実施して443番ポート通過を許可する。
# firewall-cmd –add-port=443/tcp –zone=public # firewall-cmd –add-port=443/tcp –zone=public –permanent |
4.certbotのインストール
# /usr/bin/certbot-auto certonly –webroot -w /var/www/html –email test@example.com –debug -d test.example.com Certbot クライアントの実行に必要な複数のパッケージ(依存関係にあるパッケージ)が自動的にインストールされ、仮想化された Python 環境(PyPI からダウンロードしたパッケージを動作させるための環境)が構築されます。 途中で問い合わせがあるので「y(yes)」を入力 |
- dオプションでドメインを指定するが、-d example.com -d test.example.comのように複数指定できる。最初に記述したドメインがコモンネームになる。
- 指定するすべてのドメインは、このサーバに向いたAレコードを持っていないといけない。
- wオプションでドキュメントルートディレクトリを指定する。ドメインごとに別のドキュメントルートディレクトリを指定したいときには、-dオプションの直前に-wオプションを書けば良い。
5.証明書の作成
certbotのインストール後対話型で証明書の作成が始まります – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – 管理者メールアドレスを「Let’s Encrypt」パートナーに公開しない「No」を選択 Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate |
6.サーバー証明書の確認
# ls -l /etc/letsencrypt/live/[ドメイン名]/ total 4 -rw-r–r– 1 root root 543 Apr 17 17:23 README lrwxrwxrwx 1 root root 44 Apr 17 17:23 cert.pem -> ../../archive/[ドメイン名]/cert1.pem lrwxrwxrwx 1 root root 45 Apr 17 17:23 chain.pem -> ../../archive/[ドメイン名]/chain1.pem lrwxrwxrwx 1 root root 49 Apr 17 17:23 fullchain.pem -> ../../archive/[ドメイン名]/fullchain1.pem lrwxrwxrwx 1 root root 47 Apr 17 17:23 privkey.pem -> ../../archive/[ドメイン名]/privkey1.pem |
7.Apacheへの反映
Apacheを再コンパイルしますので、次のページも参照して下さい(ssl.confは利用しません)
Apacheのインストールディレクトリーに移動後再コンパイル # ./configure \ –with-layout=Apache \ –enable-module=auth_db \ –enable-module=so \ –enable-module=most \ –enable-mods-shared=reallyall \ –enable-rewrite \ –enable-auth_digest \ –enable-ssl ← これが追加されている # make # make install httpd.conf ファイルの編集 Listen 0.0.0.0:443 ServerName localhost:443バーチャルホストの設定変更 <VirtualHost *:80> ServerAdmin [メールアドレス] ServerName [ドメイン名] ServerSignature Off RewriteEngine On RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [L,QSA,R=permanent] ErrorLog /var/log/httpd/redirect.error.log LogLevel warn ErrorDocument 404 / </VirtualHost><VirtualHost *:443> SSLEngine on DocumentRoot /var/www/html/[ドメイン名] ServerName [ドメイン名] ServerAlias localhost ErrorLog “| /usr/local/apache2/bin/rotatelogs /var/log/httpd/[ドメイン名]_error_log_%Y%m%d 86400 540″ CustomLog “| /usr/local/apache2/bin/rotatelogs /var/log/httpd/ [ドメイン名]_access_log_%Y%m%d 86400 540″ combined <Directory “/var/www/html/[ドメイン名]“> Options Indexes Includes FollowSymLinks MultiViews ExecCGI Require all granted #Allow from all AddHandler server-parsed .html Header always set Strict-Transport-Security “max-age=31536000; includeSubDomains” </Directory> SSLCertificateFile /etc/letsencrypt/live/[ドメイン名]/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/[ドメイン名]/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/[ドメイン名]/chain.pem Include /opt/eff.org/certbot/venv/lib/python2.7/site-packages/certbot_apache/options-ssl-apache.conf </VirtualHost>LoadModule socache_shmcb_module modules/mod_socache_shmcb.so ← 追加 LoadModule rewrite_module modules/mod_rewrite.so ← 追加 LoadModule ssl_module modules/mod_ssl.so ← 追加 |
Apacheを再起動する。