letsencrypt
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
letsencrypt [2016/09/26 10:05] – [インストール] nullpon | letsencrypt [2017/07/19 03:15] (現在) – nullpon | ||
---|---|---|---|
行 3: | 行 3: | ||
無料のサーバ証明書 | 無料のサーバ証明書 | ||
- | 以下Ubuntu 16.04でnginxに証明書を設定する流れ | + | 以下nginxに証明書を設定する流れ |
===== インストール ===== | ===== インストール ===== | ||
行 21: | 行 21: | ||
===== 証明書の発行 ===== | ===== 証明書の発行 ===== | ||
- | example.comとwww.example.com用の証明書を作成する。1枚で複数ドメインに対応するマルチドメイン証明書が発行される。 | + | ここでは |
+ | |||
+ | 証明書を発行するために、このサーバの管理者がドメインの所持者であることを確認する必要がある。let' | ||
+ | |||
+ | まずnginxをインストールして、ドメイン所持確認用の設定を追加し、nginxを起動する。 | ||
< | < | ||
- | /path/to/certbot-auto certonly | + | server { |
+ | server_name: | ||
+ | listen 80; | ||
+ | |||
+ | root /var/www/example.com/ | ||
+ | |||
+ | location ^~ /.well-known/acme-challenge/ { | ||
+ | root / | ||
+ | try_files $uri =404; | ||
+ | } | ||
+ | |||
+ | // ... 以下略 | ||
+ | } | ||
+ | server { | ||
+ | server_name: | ||
+ | listen 80; | ||
+ | |||
+ | root /var/www/www.example.com/htdocs | ||
+ | |||
+ | location ^~ / | ||
+ | root / | ||
+ | try_files $uri =404; | ||
+ | } | ||
+ | } | ||
</ | </ | ||
- | 証明書を発行するために、このサーバの管理者がドメインの所持者であることを確認する必要がある。いくつかの方法があるが、ここではwebrootという方法を使う。これは、指定ドメインのport 80にHTTPアクセスして、certbotコマンドが作成したファイルを取得できればドメイン所持者であると見做すもの。 | + | 次に証明書を発行する。-wはnginxのドキュメントルートを指定する。ここにドメイン確認のためのファイルが作成される。-dはドメインで複数設定可能。サブジェクト代替名(SAN/ |
- | よって、このサーバ上でWebサーバが稼働していなくてはならない。 | + | < |
+ | sudo -H / | ||
+ | </ | ||
+ | |||
+ | 証明書は ''/ | ||
+ | |||
+ | * privkey.pem - 秘密鍵、漏らしてはいけないやつ | ||
+ | * fullchain.pem - サーバ証明書+中間証明書のセット | ||
+ | * cert.pem - サーバ証明書 | ||
+ | * chain.pen - 中間証明書 | ||
+ | |||
+ | ===== httpsの設定 ===== | ||
- | nginxの設定は以下のようにする | + | nginxにsslの設定を行う。以下の設定ではhttp2も有効になる(http2はnginx 1.9.5以降で有効)。 |
< | < | ||
server { | server { | ||
- | server_name: | + | server_name: |
- | root / | + | |
| | ||
+ | listen 80; | ||
+ | | ||
+ | listen 443 ssl http2; | ||
+ | ssl on; | ||
+ | ssl_certificate | ||
+ | ssl_certificate_key | ||
+ | |||
+ | root / | ||
+ | |||
location ^~ / | location ^~ / | ||
root / | root / | ||
行 47: | 行 93: | ||
server { | server { | ||
server_name: | server_name: | ||
- | | + | |
+ | listen 80; | ||
+ | |||
+ | listen 443 ssl http2; | ||
+ | ssl on; | ||
+ | ssl_certificate | ||
+ | ssl_certificate_key | ||
+ | root / | ||
+ | |||
location ^~ / | location ^~ / | ||
root / | root / | ||
行 55: | 行 109: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | nginxをリロードする | ||
+ | |||
+ | < | ||
+ | sudo service nginx reload | ||
+ | </ | ||
+ | |||
===== 証明書の更新 ===== | ===== 証明書の更新 ===== | ||
- | 以下をroot権限でcronで週一ぐらいの期間で実行する。 | + | let's encryptの証明書は有効期間が3ヶ月と短く、cronなどで自動更新処理を行う運用を想定している。 |
+ | |||
+ | 以下のコマンドをroot権限で週一ぐらいの頻度で実行するとよい。 | ||
< | < | ||
- | / | + | sudo -H / |
+ | sudo service nginx reload | ||
</ | </ | ||
+ | |||
+ | 期限切れまで残り1ヶ月を切ったときに実行されると証明書が更新される。 | ||
+ | |||
+ | ===== メモ ===== | ||
+ | |||
+ | ==== インストール時のエラー ==== | ||
+ | |||
+ | ./ | ||
+ | |||
+ | < | ||
+ | Creating virtual environment... | ||
+ | Traceback (most recent call last): | ||
+ | File "/ | ||
+ | main() | ||
+ | File "/ | ||
+ | symlink=options.symlink) | ||
+ | File "/ | ||
+ | download=download, | ||
+ | File "/ | ||
+ | call_subprocess(cmd, | ||
+ | File "/ | ||
+ | % (cmd_desc, proc.returncode)) | ||
+ | OSError: Command / | ||
+ | </ | ||
+ | |||
+ | OSに日本語パッケージが入ってないのに、LANGがja_JP.UTF-8等になっている(SSHクライアントによって設定される)場合に発生する | ||
+ | |||
+ | < | ||
+ | export LANG=C | ||
+ | </ | ||
+ | |||
+ | としてからcertbot-autoを実行する。 | ||
+ | |||
+ | ===== セキュリティの強化 ===== | ||
+ | |||
+ | https:// | ||
+ | |||
+ | ==== Strict Transport Security (HSTS) の設定 ==== | ||
+ | |||
+ | あるドメインへhttpsでアクセスした場合、以降そのドメインへの接続にはハイパーリンクなどでhttpが指定されていてもhttpsを使うようにブラウザに指示するHTTPヘッダ | ||
+ | |||
+ | < | ||
+ | server { | ||
+ | | ||
+ | add_header Strict-Transport-Security " | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | * max-age - 有効期間(秒、31536000は1年間)を指定するヘッダオプション、この期間ブラウザはhttpsを使うよう記憶する。 | ||
+ | * includeSubDomains - サブドメインもhttpsを使うようにブラウザに指示するヘッダオプション。 | ||
+ | * always - nginxのすべてのレスポンス(内部的に生成されたエラーレスポンスなどの場合も)ヘッダを付加するようにnginxに指示する。 | ||
+ | |||
+ | ==== プロトコルと暗号化スイートの指定 ==== | ||
+ | |||
+ | 最早セキュアではないプロトコルと暗号化スイートを除外する。設定によっては古いブラウザやデバイスではアクセス不能になる。 | ||
+ | |||
+ | セキュアな設定は年々変化するので、これをコピーして使わないこと。 | ||
+ | |||
+ | < | ||
+ | server { | ||
+ | ssl_protocols TLSv1.2; | ||
+ | ssl_ciphers ' | ||
+ | ssl_prefer_server_ciphers on; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | * ssl_protocols 通信プロトコル | ||
+ | * ssl_ciphers 使用可能な暗号スイート | ||
+ | * ssl_prefer_server_ciphers onにすると暗号スイートの選択はサーバ側の指定に従い、クライアントの指定は無視される | ||
+ | |||
+ | https:// |
letsencrypt.1474884357.txt.gz · 最終更新: 2016/09/26 10:05 by nullpon