Let’s Encrypt の証明書で nginx を HTTPS化し SSL通信にする

Raspberry Pi + nginx = Webサーバー
Let’s Encrypt の証明書でHTTP/2化し、
無料で 『セキュリティ評価:A+』 を取得
 
「SSLなう! (https://sslnow.ml/)」はブラウザ上で動作する Let’s Encrypt クライアントで、
・証明書発行までほぼブラウザのみで可能
・ドメイン名所有確認方法として http-01 と dns-01 に対応
・証明書発行のための通信はすべて ブラウザ と Let’s Encrypt サーバ の間で直接行われる
・証明書申請用の署名鍵・連絡先はブラウザの localStorage に保存
と、超簡単!
 
サイト arakan60.mydns.jp で A+ を取得。
 
スポンサー リンク
 
 
証明書の取得における厄介な問題点
 1. 認証局のクライアントアプリのインストールが必要。
 2. 証明書申請のために、メールアドレスが必要。
.
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
のようなメールアドレスが求められるが、サーバーにメールシステムが設定されていなければお手上げだ。
 
そこで、Let’s Encrypt の証明書をブラウザ上で簡単 に取得できる、「SSLなう! (https://sslnow.ml/)」を利用した。

以下「SSLなう! 」によるSSL化の記録。

 
1. 「SSLなう!」による証明書取得手順
 1-1. Let’s Encrypt へ登録
 1-2. チャレンジトークンの取得
 1-3. ドメイン名の所有確認
 1-4. 証明書発行申請
 1-5. 発行された証明書
 
1-1. Let’s Encrypt へ登録
 
処理中です画面。
 
登録に成功しました画面。
 
登録が完了すると、次回以降はブラウザから自動的に署名鍵が読み込まれ、登録のステップはスキップされる。
 
1-2. チャレンジトークンの取得
証明書を取得したいドメイン名を入力し「トークンを取得」ボタンを押す。
複数のドメイン名に対する証明書を発行したい場合は「追加」ボタンを押す。
 
トークンの取得に成功しました画面。
 
1-3. ドメイン名の所有確認
トークンが取得できたら、URL欄にトークンをアップロードするディレクトリーが表示されるので、ディレクトリーとファイルを用意し、そのファイルの中に、右側に表示されている内容を貼り付けて、アップロードする。アップロードが出来たら『確認ボタン』を押す。
 
所有権の確認に成功しました画面。
 
1-4. 証明書発行申請
「RSA」を選んで、秘密鍵の「生成」ボタンを押す。
秘密鍵を一度生成し、保存されているならばその内容を貼り付ければよい。
 
RSA 秘密鍵を生成しました画面。
 
秘密鍵が生成されたら『クリップボードにコピー』を押し、保存しておく。
これが、今後必要となる秘密鍵『privkey.pem』である。
「証明書発行申請」ボタンを押して証明書の発行を申請する。
 
証明書の取得に成功しました画面。
 
証明書発行申請を何回も繰り返すと、” Too many certificates already issued for:xxxxx ” という、エラーメッセージが出て発行申請が出来なくなる。
 
一週間に5回以上はエラーになるようで、丸一週間待てば、再発行可能になる。
 
 
1-5. 発行された証明書
証明書は3種類発行される。
 
①.cert.pem(サーバ証明書)
 
②.chain.pem(中間証明書)
③.fullchain.pem(サーバ証明書と中間証明書が結合されたもの)
 
以上で、証明書の取得は完了。

2. nginx サーバー設定 HTTPS通信を有効化
 2-1. 証明書と秘密鍵の配置
 2-2. sudo nano /etc/nginx/sites-available/default の編集
 
証明書が取得出来たら、HTTPS通信を有効化するために、nginx の設定変更を行うが、この前に、ufw で設定した、iptables でのファイヤウォールに、ポート番号443 を通す ufw allow 443/tcp を行っておく。(これを忘れていた為、他のドメインににリダイレクトされ悩む。)
 
2-1. 証明書と秘密鍵を次のような場所に配置

# 証明書
 /etc/letsencrypt/live/arakan60.mydns.jp/fullchain.pem
# 秘密鍵
 /etc/letsencrypt/live/arakan60.mydns.jp/privkey.pem
 
2-2. sudo nano /etc/nginx/sites-available/default の編集
Let’s Encrypt の証明書と秘密鍵を nginx の ssl_certificate と ssl_certificate_key で指定する。

 
上部の5行で、HTTP→HTTPS リダイレクト指定を行っている。
尚、ここで ssl_protocols 等について設定を省いているのは、
/etc/nginx/nginx.conf に記述があるからである。
 
以上で、SSL化に関する設定は、すべて完了。
 
3. 「Qualys SSL Labs」でのセキュリティ評価
 
3-1. 上記設定での結果は ” B ” となった。
 
原因は、” This server supports weak Diffie-Hellman (DH) key exchange parameters. Grade capped to B. ” とのこと。
 
3-2. チューニング後の結果
次のような設定を追加した。
 
sudo nano /etc/nginx/nginx.conf の編集

 

7行目以下を追記。

その結果!

めでたしめでたし。

4. 常時SSL化後にやること
 
 4-1. Google Search ConsoleへURL登録
 4-2. Google AnalyticsのURL変更
 4-3. WordPressの設定変更
 4-4. サイト内URL(画像・リンク)の変更
 
4-1. Google Search ConsoleへURL登録
 
4-2. Google AnalyticsのURL変更
 
4-3. WordPressの設定変更
 
4-4. サイト内URL(画像・リンク)の変更
『Search Regex』という、プラグインではうまく変換されなかったので、『Search-Replace-DB-master』という、ツールで変換した。
 

以上。
(2017.01.11)

 
             

スポンサー リンク
 

関連記事

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください