Let's encrypt とは
Let's Encryptは全てのネットリソースを暗号化することを目標としてEFFが運営している団体。
2016年4月から正式リリースがされ、誰でも無料で使える認証発行サビースとなっている。
以下の利点がある
無料
簡単で自動化された認証書の発行
オープン
Let's EncryptはACMEプロトコルを使ってDV証明書を発行する。(2016/8/24現在ではDV証明書のみ)
DV証明書はドメインが正しいことを証明するものである。
ACMEプロトコルはよく分からいけど、サーバー内いないと出来ない処理をし、(endpointにファイル配置とか)をしてそのドメイン保持者かどうかを判断しているみたい。これによって面倒な登録処理は必要なく、コマンド一発で発行する事ができる。
詳しくは公式を
設定
今回awsのec2にテストとしてサーバーを一から建ててみます。
環境は以下のとおりです
- ubuntu server 16.04
- nginx (1.11.0)
ドメインは適当に収得しておく。
今回は実験を兼ねてfreenomで無料ドメインを取ってみた。無料で取れるなんてすごい。
ec2の設定
インスタンスの立ち上げ
aws consoleから適当なOSを選んで立ち上げる。
セキュリティグループの設定
セキュリティグループは初期設定だとsshしかインバウンドを許可していないので、80番と443番を開けておく。
nginxインストール
とりあえず今回はテストなのでaptから入れる
$ sudo apt install nginx
$ nginx -V
nginx version: nginx/1.10.0 (Ubuntu)
built with OpenSSL 1.0.2g 1 Mar 2016
サーバーの立ち上げ
適当に接続できるサーバーをたち上げておく。
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
$ sudo systemctl restart nginx #nginxを再起動
接続できるかテストする
$ curl (ip or url):80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
let's encryptoにインストール
OSとversionによって変わるので公式を参照すること。
ubuntu 16.04の場合
$ sudo apt install letsencrypt
$ type letsencrypt
letsencrypt is hashed (/usr/bin/letsencrypt)
今回はapacheを使わないので、python-letsencrypt-apache
はインストールしない。
(他のOSだとcertbot-auto
というコマンドになるがubuntu16.04だけletsencrypt
?そのうち変わりそう。)
証明書の発行
letsencryptはインタラクティブに設定が出来るが、何を設定したか分からなくなって嫌なので、ワンラインで行う。
-n
オプションをつけるとインタラクティブモードを起動しなくなり、足りない項目を教えてくれる。
$ sudo systemctl stop nginx
$ sudo letsencrypt certonly --standalone -n -d www.example.com -m yourmail@gmail.com --agree-tos
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/www.example.com/fullchain.pem. Your cert will
expire on 2017-08-23. To obtain a new version of the certificate in
the future, simply run Let's Encrypt again.
- If you like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
各オプションの説明は以下の通り
オプション | 説明 |
---|---|
--standalone | letsencryptのサーバーを立ち上げて認証を行う。80番ポートを使うのでnginxなどを止める必要がある。 |
-n | インタラクティブモードを使わないようにする |
-d | ドメイン. -d は一度に複数指定可能 |
-m | 登録用のメール |
--agree-tos | 利用規約に同意する |
-m
と--agree-tos
は一度すれば次回以降しなくても良いはずだが、いつでも実行できるようにこの形の方がいい。
証明書の設定
nginxに証明書を設定する。
証明書本体は/etc/letsencrypt/archive/www.example.com
に保管され、/etc/letsencrypt/live/www.example.com
にエイリアスされる。
そのため更新してもlive以下ののファイル名は変わらないので、いちいちnginxの設定を変える必要がない。
server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
#
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/letsencrypt/live/vintersnow.tk/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/vintersnow.tk/privkey.pem;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
nginxを起動
$ sudo systemctl start nginx
接続テスト
$ curl https://www.example.com
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
...
ということでssl化が出来た!