[[Linuxめも]] #contents GoogleがやたらとSSL対応を勧めてくるんですよ。~ やっぱり今後はSSL対応が必須になる時代が来そうです。 でもSSLって高いイメージがあるし、証明書の更新も面倒。~ 今の時代無料でできねーかなと調べてみたらなんかできそうな雰囲気。~ また時間がある時にトライしてみます。 [[Let's Encrypt:https://letsencrypt.jp/]] で無料でSSLが導入できるようです。~ 証明書の発行・インストール・更新のプロセスを自動化できるようです。 制限があります。~ https://letsencrypt.org/docs/rate-limits/ 参考 -https://def-4.com/lets-encrypt-multi-domains/ -https://def-4.com/letsencrypt-tls-sni-01-challenge-error/ -https://blog.apar.jp/linux/3619/ -http://qiita.com/tkykmw/items/9b6ba55bb2a6a5d90963 *クライアントソフトCertbotのインストール [#w457122c] # wget https://dl.eff.org/certbot-auto # chmod 700 certbot-auto ヘルプは以下で確認できます。 # ./certbot-auto --help 以下を実行すると、自動的にyumが実行され、必要なパッケージがインストールされます。 # ./certbot-auto CentOS6.2ではyumにて python-pip-1.3.1-4.el6.noarch がダウンロードできずにエラーになってしまいました。 epelリポジトリを入れるとハマるみたいです。~ 設定を書き換えます。 # vi /etc/yum.repos.d/epel.repo #baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch ↓ baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch #mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch *証明書の取得 [#ede60d3a] # ./certbot-auto certonly How would you like to authenticate with the ACME CA? ------------------------------------------------------------------------------- 1: Place files in webroot directory (webroot) 2: Spin up a temporary webserver (standalone) ------------------------------------------------------------------------------- Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2を入力 Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): メールアドレスを入力 ------------------------------------------------------------------------------- Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree in order to register with the ACME server at https://acme-v01.api.letsencrypt.org/directory ------------------------------------------------------------------------------- (A)gree/(C)ancel: Aを入力 Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel): 証明書を導入したいドメインをカンマもしくはスペース区切りで入力 成功すれば /etc/letsencrypt/archive/ドメイン/ 以下に4ファイル生成されます。 -cert1.pem サーバ証明書(公開鍵) -chain1.pem 中間証明書 -fullchain1.pem サーバ証明書と中間証明書が結合されたファイル -privkey1.pem 秘密鍵 数字は更新するたびにインクリメントされるようです。~ シンボリックリンクが以下に作成されるので、WEBサーバへの設定は以下を指定します。 -/etc/letsencrypt/live/ドメイン/cert.pem -/etc/letsencrypt/live/ドメイン/chain.pem -/etc/letsencrypt/live/ドメイン/fullchain.pem -/etc/letsencrypt/live/ドメイン/privkey.pem Apache 2.4.8未満では公開鍵、中間証明書、秘密鍵を使用します。~ それ以上やNginxではサーバ証明書と中間証明書が結合されたファイル、秘密鍵を使用します。 *Apacheの設定 [#a6784222] ソースでインストールしている場合は --enable-ssl が有効になっているか確認。~ 以下の行があるか確認します。 LoadModule ssl_module modules/mod_ssl.so 以下をApacheの設定ファイルに追加します。 Apache 2.4.8未満の場合 Listen 443 <VirtualHost *:443> ServerName ドメイン:443 DocumentRoot "/home/ドメイン/public_html" SSLEngine on SSLHonorCipherOrder on Header set Strict-Transport-Security "max-age=31536000; includeSubDomains" SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 SSLCertificateFile /etc/letsencrypt/live/ドメイン/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/ドメイン/chain.pem <Directory "/home/ドメイン/public_html"> Options FollowSymLinks AllowOverride ALL Require all granted </Directory> ErrorLog "logs/ssl_error_log" CustomLog "logs/ssl_access_log" combined </VirtualHost> Apache 2.4.8以降の場合 <VirtualHost *:443> ServerName ドメイン:443 DocumentRoot "/home/ドメイン/public_html" SSLEngine on SSLHonorCipherOrder on Header set Strict-Transport-Security "max-age=31536000; includeSubDomains" SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 SSLCertificateFile /etc/letsencrypt/live/ドメイン/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン/privkey.pem <Directory "/home/ドメイン/public_html"> Options FollowSymLinks AllowOverride ALL Require all granted </Directory> ErrorLog "logs/ssl_error_log" CustomLog "logs/ssl_access_log" combined </VirtualHost> **httpへのアクセスをhttpsへ転送させる [#h2c276fa] .htaccessを設置してhttpにアクセスがあった場合はhttpsへそのまま転送させます。 RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] *自動更新の設定 [#peb4c288] crontabに登録しておくことで自動更新が可能です。 毎月1日午前9時に一括更新する場合 0 9 1 * * /etc/rc.d/init.d/httpd stop && /pathto/certbot-auto renew --force-renew && /etc/rc.d/init.d/httpd start 毎月1日午前9時に特定のドメインを更新する場合 0 9 1 * * /etc/rc.d/init.d/httpd stop && /pathto/certbot-auto certonly --standalone -d example.com -d example2.com --renew-by-default && /etc/rc.d/init.d/httpd start