facebook twitter hatena line email

「Linux/LetsEncrypt導入」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(sslの自動更新)
(nginxのproxyを使ってる場合)
行54: 行54:
  
 
==nginxのproxyを使ってる場合==
 
==nginxのproxyを使ってる場合==
http://qiita.com/ywatai@github/items/a179186a458a42b3c7f0
+
server {
 +
      listen        80;
 +
      server_name    example.com;
 +
      rewrite        ^ https://$http_host$request_uri? permanent;
 +
}
 +
server {
 +
      listen 443 ssl;
 +
      server_name example.net;
 +
      ssl_certificate /etc/letsencrypt/live/example.net/fullchain.pem;
 +
      ssl_certificate_key /etc/letsencrypt/live/example.net/privkey.pem;
 +
      location / {
 +
            proxy_pass http://example.localhost/;
 +
            proxy_redirect http:// https://;
 +
            proxy_set_header Host $host;
 +
            proxy_set_header X-Real-IP $remote_addr;
 +
            proxy_set_header X-Forwarded-Proto https;
 +
            proxy_set_header X-Forwarded-Host $host;
 +
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 +
      }
 +
      location ^~ /.well-known/acme-challenge/ {
 +
            root /var/www/html/public;
 +
      }
 +
}
 +
 
 +
参考:http://qiita.com/ywatai@github/items/a179186a458a42b3c7f0
  
 
==sslの自動更新==
 
==sslの自動更新==

2016年7月2日 (土) 12:09時点における版

certbot-autoのインストール

# cd /usr/local
# git clone https://github.com/certbot/certbot
# cd ./certbot
# ./certbot-auto

証明書取得

./certbot-auto certonly --webroot \
-w /var/www/example/public -d example.com \
-m sample@example.com \
--agree-tos

以下エラーが発生する場合はPythonが2.6になってる可能性があるので、Python 2.7を入れる必要がある

./certbot-auto: line 558: virtualenv

Python 2.7のインストール

$ sudo yum install centos-release-scl
$ sudo yum install python27 python27-python-tools
$ python -V
Python 2.6.6
# デフォだと2.6なので以下コマンドで一時的に2.7へ
$ sudo scl enable python27 bash
$ python -V
Python 2.7.8

ログイン時にpythonが2.7.8となるように

# vi /etc/profile.d/enablepython27.sh
#!/bin/bash
source /opt/rh/python27/enable
export X_SCLS="`scl enable python27 'echo $X_SCLS'`" 

参考:http://blog.offline-net.com/2016/05/08/apache_24_with_letsencrypt/

証明書取得が出来たら以下ファイルが出来てることを確認

# ls /etc/letsencrypt/live/[ドメイン]/
cert.pem       chain.pem      fullchain.pem  privkey.pem

nginx設定に追加

server {
 listen 80;
 server_name example.net;
 rewrite ^ https://$server_name$request_uri? permanent;
}
server {
   listen 443 ssl;
   server_name example.net;
   ssl_certificate /etc/letsencrypt/live/example.net/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/example.net/privkey.pem;

sslのfirewallを切る

$ sudo vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
$ sudo /etc/rc.d/init.d/iptables restart

nginxのproxyを使ってる場合

server {
     listen         80;
     server_name    example.com;
     rewrite        ^ https://$http_host$request_uri? permanent;
}
server {
     listen 443 ssl;
     server_name example.net;
     ssl_certificate /etc/letsencrypt/live/example.net/fullchain.pem;
     ssl_certificate_key /etc/letsencrypt/live/example.net/privkey.pem;
     location / {
            proxy_pass http://example.localhost/;
            proxy_redirect http:// https://;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     }
     location ^~ /.well-known/acme-challenge/ {
           root /var/www/html/public;
     }
}

参考:http://qiita.com/ywatai@github/items/a179186a458a42b3c7f0

sslの自動更新

有効期限が90日間しかないので自動更新する必要がある

以下で更新できるが、nginx, apacheなどを再読込しなければならないためcrontabによる手動更新が推奨される様子。

# ./certbot-auto renew

更新を手動で行いnginxの設定を再読込する

# crontab -e

全ドメインを更新するには

0 5 1 * * /usr/local/certbot/certbot-auto renew --force-renew && /etc/rc.d/init.d/nginx reload

個別ドメインを更新するには

0 5 1 * * /usr/local/certbot/certbot-auto certonly --webroot -w /var/www/example -d example.com --renew-by-default && /etc/rc.d/init.d/nginx reload

参考:https://blog.apar.jp/linux/3619/

httpsするにあたって

  • scriptなどのhttp記述をhttpsへ書き直す

参考