動作確認環境
- 仮想環境 VMware Workstation Player 14.1.1
- OS Windows 10 Pro 64bit
仮想環境
- OS CentOS 7.4 (1708) minimalインストール
- メモリ 2GB
- HDD 250GB
前提条件
- gcc 7.3.0
- cmake 3.11.4
- MySQL 5.7.22
- OpenSSL 1.1.0.h
- Apache 2.4.33
- PHP 7.2.6
- 有効なドメイン (example.comを取得と仮定)
ファイルのダウンロードと実行
/usr/local/
ディレクトリに移動する。
cd /usr/local/
ファイルをダウンロードする。
wget https://dl.eff.org/certbot-auto
パーミッションを変更する。
chmod a+x certbot-auto
実行する。
./certbot-auto
証明書の取得
./certbot-auto certonly --webroot -w /usr/local/apache2/htdocs -d example.com -m test@example.com --agree-tos
Let's Encryptのメールリストに登録するかと、聞かれるので不要な方はnを入力する。
-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o:
不要な方はnを入力する。
以下の場所に証明書や秘密鍵が保存される。
証明書
/etc/letsencrypt/live/example.com/cert.pem
証明書+中間CA証明書
/etc/letsencrypt/live/example.com/fullchain.pem
秘密鍵
/etc/letsencrypt/live/example.com/privkey.pem
中間CA証明書
/etc/letsencrypt/live/example.com/chain.pem
証明書の自動更新の設定をする。
crontab -u root -e
以下のコマンドを書き込む。
00 05 01 * * /usr/local/certbot/certbot-auto renew --force-renew && /usr/local/apache2/bin/apachectl graceful
#HTTP/2 と SSL/TLS の設定
SSL設定ファイルをバックアッップする。
cp /usr/local/apache2/conf/extra/httpd-ssl.conf /usr/local/apache2/conf/extra/httpd-ssl.conf.org
・SSL設定ファイルを作成します。
vi /usr/local/apache2/conf/extra/httpd-ssl.conf
httpd-ssl.conf
のオリジナルファイルと違うのでこの内容を利用してください。
httpd-ssl.conf
Listen 443
SSLPassPhraseDialog builtin
SSLSessionCache "shmcb:/usr/local/apache2/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
SSLStrictSNIVHostCheck off
SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets off
<VirtualHost *:443>
Protocols h2 http/1.1
ServerName example.com
DocumentRoot "/usr/local/apache2/htdocs"
<Directory "/usr/local/apache2/htdocs">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
SSLEngine on
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
ErrorLog "logs/error_log"
CustomLog "logs/access_log" combined
</VirtualHost>
SSL設定ファイルを読込むように変更する。
vi /usr/local/apache2/conf/httpd.conf
コメントアウトする。
httpd.conf
Include conf/extra/httpd-ssl.conf
このままapacheを再起動するとエラーが発生するためmod_ssl.so
とmod_socache_shmcb.so
をコメントアウトする。
httpからhttpsへ自動転送
httpからhttpsへ自動転送できるようmod_rewrite.so
をコメントアウトする。
httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
この行の下に以下の内容を追記する。
httpd.conf
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</ifModule>
Apache を再起動する。
systemctl restart httpd
これでHTTP/2対応になる。
参考
Macのローカル開発環境でhttpsを有効にしたらApacheが起動しない - Qiita