CentOS 7 Let's Encrypt サーバ証明書の取得

# 動作確認環境
- 仮想環境 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](https://qiita.com/iwtk/items/692e90df5ce2d87dc961)

---
[目次](https://qiita.com/knutpb1205/items/3ece0cab588afdb13f02)