内容へ移動
Cat Paw Software
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
letsencrypt
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== let's encrypt ====== 無料のサーバ証明書 以下nginxに証明書を設定する流れ ===== インストール ===== githubからcloneする <code> git clone https://github.com/certbot/certbot.git </code> 必要なパッケージをインストールする <code> cd certbot ./certbot-auto </code> ===== 証明書の発行 ===== ここでは example.com と www.example.com の2つのドメインに対する証明書を発行するものとして記述する。 証明書を発行するために、このサーバの管理者がドメインの所持者であることを確認する必要がある。let's encryptでは指定ドメインのport 80にHTTPアクセスして、certbotコマンドが作成したファイルを取得できればドメイン所持者であると見做す。 まずnginxをインストールして、ドメイン所持確認用の設定を追加し、nginxを起動する。 <code> 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> 次に証明書を発行する。-wはnginxのドキュメントルートを指定する。ここにドメイン確認のためのファイルが作成される。-dはドメインで複数設定可能。サブジェクト代替名(SAN/Subject Alternative Name)によって1枚で複数のサーバ名に対応する証明書が発行される。 <code> sudo -H /path/to/certbot-auto certonly --webroot -w /var/www/html -d example.com -d www.example.com </code> 証明書は ''/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> server { server_name: example.com; 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/ { root /var/www/html; try_files $uri =404; } // ... 以下略 } server { server_name: www.example.com 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/ { root /var/www/html; try_files $uri =404; } } </code> nginxをリロードする <code> sudo service nginx reload </code> ===== 証明書の更新 ===== let's encryptの証明書は有効期間が3ヶ月と短く、cronなどで自動更新処理を行う運用を想定している。 以下のコマンドをroot権限で週一ぐらいの頻度で実行するとよい。 <code> sudo -H /path/to/certbot-auto renew -n sudo service nginx reload </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.txt
· 最終更新: 2017/07/19 03:15 by
nullpon
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ