無料sslLet’sEncryptをさくらvpsに。

2017年2月12日更新 view: 39 view
https://ikuty.com/wp-content/uploads/2016/06/ssl-ecusson.png

まずは certbot-auto のインストール

curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto

パーミッションを変更

chmod 700 /usr/bin/certbot-auto

ここまででインストール完了

フォルダを作る

/var/www/html/yourdomain.com/acme/

mkdir acme
chown nginx.nginx acme
chomod 777 acme
スポンサードリンク

これでフォルダが完成。
一応403,404エラーを避けるために作っておく。

certbot-auto 用にnginxのパスを設定しよう

vim /etc/nginx/conf.d/default.conf

server {
listen       80;
server_name yourdomain.com;

root /var/www/html/yourdomain.com/webroot/;

index  index.html index.php;

location ^~ /.well-known/acme-challenge/ {
root /var/www/html/yourdomain.com/acme/; #ここのフォルダと後でcertbot-autoコマンドするフォルダは同一になる。
}

location = /.well-known/acme-challenge/ {
return 404;
}


#その他はいつもの設定でok

}

そして、パスを変えたらここで必ずnginxを再起動!

ここで大切なのが location 2つ。
ちなみに ブラウザでこの .well-known を見ようとしても
403,404 エラーになるので注意。
つまり、ブラウザからは確認する必要無し。

certbot-auto で証明書を作成

certbot-auto certonly \ # 証明書の作成
--webroot \ # 既存のウェブサーバを使うモードを選択
-w /usr/share/nginx/html \ # ドキュメント・ルートのパス
-d secure.zem.jp \ # 認証するドメイン名
--email <メール>@<アドレス> # メールアドレス登録(証明書期限切れの通知用)

今回の場合は
以下のコマンドで。

certbot-auto certonly --webroot -w /var/www/html/yourdomain.com/acme/ -d youradomain.com

ここまででインストール完了。
次はsslで接続できるように設定していきます。
ちなみに ここの /acme/ フォルダのパスは nginx で指定したパスと同一にする必要があります。

httpsでssl接続できるようにnginxを設定

/etc/nginx/conf.d/default.conf
を編集

まずはsslで接続できるように追加。

server {
#ここが大事ね
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate         /etc/letsencrypt/live/yourdomain.com/cert.pem;
ssl_certificate_key     /etc/letsencrypt/live/yourdomain.com/privkey.pem;

#以下、いままで通りのcakephp3の設定をそのままコピペ

server_name yourdomain.com;

access_log  /var/log/nginx/twiseo.access.log;
error_log  /var/log/nginx/twiseo.error.log warn;

root /var/www/html/yourdomain.com/webroot/;

index  index.html index.php;



location ^~ /.well-known/acme-challenge/ {
root /var/www/html/yourdomain.com/acme/;
}

location = /.well-known/acme-challenge/ {
return 404;
}



location /phpmyadmin {
alias /usr/share/phpMyAdmin/;
try_files $uri $uri/ /index.php;

location ~ ^/phpmyadmin/(.+\.php)$ {
alias /usr/share/phpMyAdmin;
fastcgi_pass   unix:/var/run/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME /usr/share/phpMyAdmin/$1;        include fastcgi_params;
fastcgi_intercept_errors on;
}
}









location / {
try_files $uri $uri?$args $uri/ /index.php?$uri&$args /index.php?$args;
}

location ~ \.php$ {        try_files      $uri =404;
fastcgi_pass   unix:/var/run/php-fpm.sock;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
include        fastcgi_params;
}

}

http 接続された場合は https へ強制的に飛ばす

server {
listen       80;
server_name yourdomain.com;
root /var/www/html/yourdomain.com/webroot/;
index  index.html index.php;


return  301 https://yourdomain.com$request_uri;#ここでhttpsに強制的に飛ばす

#以下今までどおりの設定でok
}

つまり、
今までと同じく
http → 80
https → 443
の2つの server 設定が必要となる。
同じ.confに書けば良い。

つづいてssl証明書の自動更新をcronに。

毎月 1度 のみ処理するので以下のコマンドをcronに書く。

45 0 1 * * source /root/certbot/venv/bin/activate && certbot renew --force-renew > /tmp/cron_error.log 2>&1
49 0 1 * * /usr/bin/certbot-auto renew --force-renew#証明書自動更新
57 0 1 * * /usr/bin/systemctl restart nginx

There were too many requests of a given type :: Error creating new cert :: Too many certificates already issued for: <Your Domain>

とでたらやり過ぎ。時間をおいてやってね。

sslをA+にする

pemファイルの場所へ移動。

cd /etc/letsencrypt/live/yourdomain.com/
openssl dhparam -out dhparam.pem 2048
openssl dhparam -text -in dhparam.pem -noout

これで
・fullchain.pem
・dhparam.pem
ファイルの生成完了

最終的なnginxの設定は
vim /etc/nginx/conf.d/default.conf

# HTTP で接続があった際に HTTPS へリダイレクトする為の設定
server {
listen 80;
server_name twiseo.net;
rewrite ^ https://$server_name$request_uri? permanent;
}


server {

listen 443 ssl http2;
listen [::]:443 ssl http2;

#sslの設定ここから
ssl_certificate         /etc/letsencrypt/live/twiseo.net/fullchain.pem;#ここをfullchain.pemに変更
ssl_certificate_key     /etc/letsencrypt/live/twiseo.net/privkey.pem;
ssl_dhparam          /etc/letsencrypt/live/twiseo.net/dhparam.pem;

ssl_session_timeout  10m;
ssl_prefer_server_ciphers  on;
ssl_ciphers  'ECDH !aNULL !eNULL !SSLv2 !SSLv3';
add_header  Strict-Transport-Security "max-age=31536000; includeSubdomains";
#ここまでsslの設定


server_name twiseo.net;

#access_log  /var/log/nginx/twiseo.access.log;#error_log  /var/log/nginx/twiseo.error.log warn;

root /var/www/html/twiseo.net/webroot/;
index  index.html index.php;

location ^~ /.well-known/acme-challenge/ {
root /var/www/html/acme/;
}
location = /.well-known/acme-challenge/ {
return 404;
}



location /phpmyadmin {

alias /usr/share/phpMyAdmin/;
try_files $uri $uri/ /index.php;

location ~ ^/phpmyadmin/(.+\.php)$ {
alias /usr/share/phpMyAdmin;
fastcgi_pass   unix:/var/run/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME /usr/share/phpMyAdmin/$1;
include fastcgi_params;
fastcgi_intercept_errors on;
}
}


location / {
try_files $uri $uri?$args $uri/ /index.php?$uri&$args /index.php?$args;
}

location ~ \.php$ {
try_files      $uri =404;
fastcgi_pass   unix:/var/run/php-fpm.sock;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
include        fastcgi_params;
}

}

https://www.ssllabs.com/ssltest/analyze.html
上記サイトにurlを入れるとA+になる。

スポンサードリンク

関連記事

関連カテゴリ

まろにーちゃん

一位を目指して日々がんばっています!

ピックアップ

パソコン・ソフトウェア ランキング

3月28日 ( 火 ) にアクセスが多かった記事はこちら!