LoginSignup
0
3

More than 5 years have passed since last update.

Let's encrypt How To 1 (初期設定編)

Last updated at Posted at 2017-05-25

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番を開けておく。

sg.png

nginxインストール

とりあえず今回はテストなのでaptから入れる

$ sudo apt install nginx
$ nginx -V
nginx version: nginx/1.10.0 (Ubuntu)
built with OpenSSL 1.0.2g  1 Mar 2016

サーバーの立ち上げ

適当に接続できるサーバーをたち上げておく。

/etc/nginx/sites-available/default
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の設定を変える必要がない。

/etc/nginx/sites-available/default
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化が出来た!

運用編に続く

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3