Raspberry Pi + nginx = Webサーバー
Let's Encrypt の証明書でHTTP/2化し、
無料で 『セキュリティ評価:A+』 を取得
Let's Encrypt の証明書でHTTP/2化し、
無料で 『セキュリティ評価:A+』 を取得
「SSLなう! (https://sslnow.ml/)」はブラウザ上で動作する Let’s Encrypt クライアントで、
・証明書発行までほぼブラウザのみで可能
・ドメイン名所有確認方法として http-01 と dns-01 に対応
・証明書発行のための通信はすべて ブラウザ と Let’s Encrypt サーバ の間で直接行われる
・証明書申請用の署名鍵・連絡先はブラウザの localStorage に保存
と、超簡単!
・証明書発行までほぼブラウザのみで可能
・ドメイン名所有確認方法として http-01 と dns-01 に対応
・証明書発行のための通信はすべて ブラウザ と Let’s Encrypt サーバ の間で直接行われる
・証明書申請用の署名鍵・連絡先はブラウザの localStorage に保存
と、超簡単!
サイト arakan60.mydns.jp で A+ を取得。
スポンサー リンク
目 次
1. 「SSLなう!」にした理由
証明書の取得における厄介な問題点
1. 認証局のクライアントアプリのインストールが必要。
2. 証明書申請のために、メールアドレスが必要。
1. 認証局のクライアントアプリのインストールが必要。
2. 証明書申請のために、メールアドレスが必要。
.
1.認証局のクライアントアプリのインストールについて
Let’s Encryptクライアントのダウンロードの場合、『Debian 7 (wheezy) のパッケージ管理システムには Certbot クライアントは収録されていません。』ということで、certbot-auto のセットアップに苦労した。
1.認証局のクライアントアプリのインストールについて
Let’s Encryptクライアントのダウンロードの場合、『Debian 7 (wheezy) のパッケージ管理システムには Certbot クライアントは収録されていません。』ということで、certbot-auto のセットアップに苦労した。
2. 証明書申請のために、メールアドレスが必要
殆んどの認証局で、証明書を申請する時点で、
殆んどの認証局で、証明書を申請する時点で、
postmaster@mydns.jp
hostmaster@mydns.jp
webmaster@mydns.jp
postmaster@arakan60.mydns.jp
hostmaster@arakan60.mydns.jp
webmaster@arakan60.mydns.jp
hostmaster@mydns.jp
webmaster@mydns.jp
postmaster@arakan60.mydns.jp
hostmaster@arakan60.mydns.jp
webmaster@arakan60.mydns.jp
のようなメールアドレスが求められるが、サーバーにメールシステムが設定されていなければお手上げだ。
そこで、Let's Encrypt の証明書をブラウザ上で簡単 に取得できる、「SSLなう! (https://sslnow.ml/)」を利用した。→ 変更:「SSLなう! (https://sslnow.cf/)」
以下、「SSLなう! 」によるSSL化の記録。
2. 「SSLなう!」による証明書の取得
2. 「SSLなう!」による証明書取得手順
2-1. Let's Encrypt へ登録
2-2. チャレンジトークンの取得
2-3. ドメイン名の所有確認
2-4. 証明書発行申請
2-5. 発行された証明書の保存
2-1. Let's Encrypt へ登録
2-2. チャレンジトークンの取得
2-3. ドメイン名の所有確認
2-4. 証明書発行申請
2-5. 発行された証明書の保存
2-3. ドメイン名の所有確認。
トークンが取得できたら、URL欄にトークンをアップロードするディレクトリーが表示されるので、ディレクトリーとファイルを用意し、そのファイルの中に、右側に表示されている内容を貼り付けて、アップロードする。アップロードが出来たら『確認ボタン』を押す。
一週間に 5回以上はエラーになるようで、丸一週間待てば、再発行可能になる。
2-5. 発行された証明書の保存。
証明書は3種類発行されるので、それぞれコピーして保存する。
証明書は3種類発行されるので、それぞれコピーして保存する。
以上で、証明書の取得は完了。
3. nginx サーバー設定:HTTPS通信を有効化
3-1. 証明書と秘密鍵の配置
3-2. sudo nano /etc/nginx/sites-available/default の編集
3-2. sudo nano /etc/nginx/sites-available/default の編集
証明書が取得出来たら、HTTPS通信を有効化するために、nginx の設定変更を行うが、この前に、ufw で設定した、iptables でのファイヤウォールに、ポート番号443 を通す ufw allow 443/tcp を行っておく。(これを忘れていた為、他のドメインににリダイレクトされ悩む。)
3-1. 証明書と秘密鍵を次の場所に配置。
# 証明書
/etc/letsencrypt/live/arakan60.mydns.jp/fullchain.pem
# 秘密鍵
/etc/letsencrypt/live/arakan60.mydns.jp/privkey.pem
/etc/letsencrypt/live/arakan60.mydns.jp/fullchain.pem
# 秘密鍵
/etc/letsencrypt/live/arakan60.mydns.jp/privkey.pem
3-2. sudo nano /etc/nginx/sites-available/default の編集。
Let's Encrypt の証明書と秘密鍵を nginx の ssl_certificate と ssl_certificate_key で指定する。
Let's Encrypt の証明書と秘密鍵を nginx の ssl_certificate と ssl_certificate_key で指定する。
server {
listen 80;
server_name arakan60.mydns.jp;
return 301 https://$host$request_uri;
}
server {
listen 443;
ssl on;
server_name arakan60.mydns.jp;
root /home/yaopi/www;
ssl_certificate /etc/letsencrypt/live/arakan60.mydns.jp/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/arakan60.mydns.jp/privkey.pem;
...省略...
上部の5行で、HTTP→HTTPS リダイレクト指定を行っている。
尚、ここで ssl_protocols 等について設定を省いているのは、
/etc/nginx/nginx.conf に記述があるからである。
/etc/nginx/nginx.conf に記述があるからである。
以上で、SSL化に関する設定は、すべて完了。
2019.12.09 追記
/etc/nginx/conf.d/default.conf の記述について。
listen 443;
ssl on;
ssl on;
上記の記述だと、【sudo nginx -t】で次の警告が出る。
nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /etc/nginx/conf.d/default.conf:21
警告が出ない、修正版の記述要領。
listen 443 ssl;
# ssl on;
# ssl on;
4. 「Qualys SSL Labs」でのセキュリティ評価
原因は、" This server supports weak Diffie-Hellman (DH) key exchange parameters. Grade capped to B. " とのこと。
4-2. チューニング後の結果。
次のような設定を追加した。
次のような設定を追加した。
sudo nano /etc/nginx/nginx.conf の編集。
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
# 安全でない暗号化スイートはサポートしない
ssl_ciphers 'ECDH !aNULL !eNULL !SSLv2 !SSLv3';
#HTTP Strict Transport Security --- HSTSの設定
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';
7行目以下を追記。
めでたしめでたし。
2019.12.09 追記
警告の内容。
This server does not support Forward Secrecy with the reference browsers. Grade capped to B.
Forward Secrecy設定が必要、というメッセージに変わった。
Nginxでの Forward Secrecy の設定方法。
##
# SSL Perfect Forward Secrecy(PFS)を有効にする Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
# 安全でない暗号化スイートはサポートしない
# ssl_ciphers 'ECDH !aNULL !eNULL !SSLv2 !SSLv3';
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SH$"
#HTTP Strict Transport Security --- HSTSの設定
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';
5. 常時SSL化後にやること
5-1. Google Search ConsoleへURL登録
5-2. Google AnalyticsのURL変更
5-3. WordPressの設定変更
5-4. サイト内URL(画像・リンク)の変更
5-2. Google AnalyticsのURL変更
5-3. WordPressの設定変更
5-4. サイト内URL(画像・リンク)の変更
5-1. Google Search ConsoleへURL登録。
5-2. Google AnalyticsのURL変更。
5-4. サイト内URL(画像・リンク)の変更。
『Search Regex』という、プラグインではうまく変換されなかったので、『Search-Replace-DB-master』という、ツールで変換した。
『Search Regex』という、プラグインではうまく変換されなかったので、『Search-Replace-DB-master』という、ツールで変換した。
参考:
以上。
(2017.01.11)
スポンサー リンク
コピペしたらエラーがでたのでよく見たら
ssl_ciphers “EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SH$
の所に”;がたりないようです。
付け加えたらちゃんと動作しました。
ご指摘ありがとうございます。
修正しました。・・・ご迷惑をお掛けし、申し訳ありません。
参考にさせてもらった結果
セキュリティ評価A+の判定を取れたのは
このサイトのおかげですので、
ご迷惑なんてとんでもないです
ありがとうございました。