ユーザ用ツール

サイト用ツール


letsencrypt

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
letsencrypt [2016/09/26 10:11] – [証明書の発行] nullponletsencrypt [2017/07/19 03:15] (現在) nullpon
行 3: 行 3:
 無料のサーバ証明書 無料のサーバ証明書
  
-以下Ubuntu 16.04でnginxに証明書を設定する流れ+以下nginxに証明書を設定する流れ
  
 ===== インストール ===== ===== インストール =====
行 21: 行 21:
 ===== 証明書の発行 ===== ===== 証明書の発行 =====
  
-example.comとwww.example.com証明書を作成する。1枚で複数ドメインに対するマルチドメイン証明書発行される。+ここでは example.com と www.example.com の2つのドメインに対する証明書発行するものとして記述する。
  
 証明書を発行するために、このサーバの管理者がドメインの所持者であることを確認する必要がある。let's encryptでは指定ドメインのport 80にHTTPアクセスして、certbotコマンドが作成したファイルを取得できればドメイン所持者であると見做す。 証明書を発行するために、このサーバの管理者がドメインの所持者であることを確認する必要がある。let's encryptでは指定ドメインのport 80にHTTPアクセスして、certbotコマンドが作成したファイルを取得できればドメイン所持者であると見做す。
  
-だwebサバが稼働してない場合は以下のコマン+ずnginxをインストしてメイン所持確認用の設定を追加し、nginxを起動する。
  
 <code> <code>
-/path/to/certbot-auto certonly --standalone -d example.com -d www.example.com+server { 
 +    server_name: example.com; 
 +    listen 80; 
 +     
 +    root /var/www/example.com/htdocs; 
 +     
 +    location ^~ /.well-known/acme-challenge/ { 
 +        root /var/www/html; 
 +        try_files $uri =404; 
 +    } 
 +     
 +    // ... 以下略 
 +
 +server { 
 +    server_name: www.example.com 
 +    listen 80; 
 + 
 +    root /var/www/www.example.com/htdocs 
 + 
 +    location ^~ /.well-known/acme-challenge/
 +        root /var/www/html; 
 +        try_files $uri =404; 
 +    } 
 +}
 </code> </code>
  
-にnginxが稼働中場合は以下のコマンドで+証明書を発行する。-wはnginxのドキュメトルートを指定する。ここにメイン確認のためのファイルが作成される。-dはドメイン複数設定可能。サブジェクト代替名(SAN/Subject Alternative Name)によって1枚で複数のサーバ名に対応する証明書が発行される。
  
 <code> <code>
-/path/to/certbot-auto certonly --webroot -w /var/www/html -d example.com -d www.example.com+sudo -H /path/to/certbot-auto certonly --webroot -w /var/www/html -d example.com -d www.example.com
 </code> </code>
  
-nginxに予めドメイン確認のためアクセスされるlocationの設定をしておく+証明書は ''/etc/letsencrypt/live/example.com'' 以下作成される(''/etc/letsencrypt/live/www.example.com'' というディレクトリは作られません)。 
 + 
 +  * privkey.pem - 秘密鍵、漏らしてはいけないやつ 
 +  * fullchain.pem - サーバ証明書+中間証明書のセット 
 +  * cert.pem - サーバ証明書 
 +  * chain.pen - 中間証明書  
 + 
 +===== httpsの設定 ===== 
 + 
 +nginxにsslの設定を行う。以下の設定ではhttp2も有効になる(http2はnginx 1.9.5以降で有効)
  
 <code> <code>
 server { server {
-    server_name: example.com +    server_name: example.com;
-    root /var/www/example.com/htdocs+
          
 +    listen 80;
 +    
 +    listen 443 ssl http2;
 +    ssl on;
 +    ssl_certificate      /etc/letsencrypt/live/example.com/fullchain.pem;
 +    ssl_certificate_key  /etc/letsencrypt/live/example.com/privkey.pem;
 +
 +    root /var/www/example.com/htdocs;
 +     
     location ^~ /.well-known/acme-challenge/ {     location ^~ /.well-known/acme-challenge/ {
         root /var/www/html;         root /var/www/html;
行 53: 行 93:
 server { server {
     server_name: www.example.com     server_name: www.example.com
-    root /var/www/www.example.com/htdocs+     
 +    listen 80; 
 +     
 +    listen 443 ssl http2; 
 +    ssl on; 
 +    ssl_certificate      /etc/letsencrypt/live/example.com/fullchain.pem; 
 +    ssl_certificate_key  /etc/letsencrypt/live/example.com/privkey.pem;
  
 +    root /var/www/www.example.com/htdocs
 +     
     location ^~ /.well-known/acme-challenge/ {     location ^~ /.well-known/acme-challenge/ {
         root /var/www/html;         root /var/www/html;
行 61: 行 109:
 } }
 </code> </code>
 +
 +nginxをリロードする
 +
 +<code>
 +sudo service nginx reload
 +</code>
 +
  
 ===== 証明書の更新 ===== ===== 証明書の更新 =====
  
-以下をroot権限でcronで週一ぐらいの期間で実行する。+let's encryptの証明書は有効期間が3ヶ月と短く、cronなどで自動更新処理を行う運用を想定している。 
 + 
 +以下のコマンドをroot権限で週一ぐらいの頻度で実行するとよい
  
 <code> <code>
-/path/to/certbot-auto renew && service nginx reload+sudo -H /path/to/certbot-auto renew -n 
 +sudo service nginx reload
 </code> </code>
 +
 +期限切れまで残り1ヶ月を切ったときに実行されると証明書が更新される。
 +
 +===== メモ =====
 +
 +==== インストール時のエラー ====
 +
 +./certbot-autoを実行して必要なパッケージのインストール中(pythonのvirtualenv設定中)にエラー
 +
 +<code>
 +Creating virtual environment...
 +Traceback (most recent call last):
 +  File "/usr/lib/python3/dist-packages/virtualenv.py", line 2363, in <module>
 +    main()
 +  File "/usr/lib/python3/dist-packages/virtualenv.py", line 719, in main
 +    symlink=options.symlink)
 +  File "/usr/lib/python3/dist-packages/virtualenv.py", line 988, in create_environment
 +    download=download,
 +  File "/usr/lib/python3/dist-packages/virtualenv.py", line 918, in install_wheel
 +    call_subprocess(cmd, show_stdout=False, extra_env=env, stdin=SCRIPT)
 +  File "/usr/lib/python3/dist-packages/virtualenv.py", line 812, in call_subprocess
 +    % (cmd_desc, proc.returncode))
 +OSError: Command /home/hisanori/.loca...ncrypt/bin/python2.7 - setuptools pkg_resources pip wheel failed with error code 1
 +</code>
 +
 +OSに日本語パッケージが入ってないのに、LANGがja_JP.UTF-8等になっている(SSHクライアントによって設定される)場合に発生する
 +
 +<code>
 +export LANG=C
 +</code>
 +
 +としてからcertbot-autoを実行する。
 +
 +===== セキュリティの強化 =====
 +
 +https://wiki.mozilla.org/Security/Server_Side_TLS
 +
 +==== Strict Transport Security (HSTS) の設定 ====
 +
 +あるドメインへhttpsでアクセスした場合、以降そのドメインへの接続にはハイパーリンクなどでhttpが指定されていてもhttpsを使うようにブラウザに指示するHTTPヘッダ
 +
 +<code>
 +server {
 +    
 +    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;   
 +    
 +}
 +</code>
 +
 +  * max-age - 有効期間(秒、31536000は1年間)を指定するヘッダオプション、この期間ブラウザはhttpsを使うよう記憶する。
 +  * includeSubDomains - サブドメインもhttpsを使うようにブラウザに指示するヘッダオプション。
 +  * always - nginxのすべてのレスポンス(内部的に生成されたエラーレスポンスなどの場合も)ヘッダを付加するようにnginxに指示する。
 +
 +==== プロトコルと暗号化スイートの指定 ====
 +
 +最早セキュアではないプロトコルと暗号化スイートを除外する。設定によっては古いブラウザやデバイスではアクセス不能になる。
 +
 +セキュアな設定は年々変化するので、これをコピーして使わないこと。
 +
 +<code>
 +server {
 +    ssl_protocols TLSv1.2;
 +    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
 +    ssl_prefer_server_ciphers on;
 +}
 +</code>
 +
 +  * ssl_protocols 通信プロトコル
 +  * ssl_ciphers 使用可能な暗号スイート
 +  * ssl_prefer_server_ciphers onにすると暗号スイートの選択はサーバ側の指定に従い、クライアントの指定は無視される
 +
 +https://mozilla.github.io/server-side-tls/ssl-config-generator/
letsencrypt.1474884665.txt.gz · 最終更新: 2016/09/26 10:11 by nullpon