ローカルホスト(127.0.0.1)用のSSL証明書を取得する

2021年11月17日

開発環境(ローカル)にSSLを通したい!

node.jsで開発環境Webサイトを127.0.0.1に立てます。

しかし,証明書がないと,SSLでアクセスできない。

(自己証明書を作れば,動きはしますが,あまりよろしくない・・・。)

そこで,本番環境を想定して,Let’s Encryptと,Certbotを使い,ローカルホスト用の証明書を取得します。

私の環境は,Macですが,Windowsでも,ほかのLinuxでもいけるでしょう。

*事前に,DNSレコードを編集できるドメインの取得が必要です。

ローカル環境にCertbotをインストール

 % brew install certbot

Homebrew を用いてインストールします,便利。

DNSのAレコードにローカルホストを設定

次に,「お名前.com」や「ムームードメイン」のDNSレコードの設定ページにアクセスし,ローカルホスト(127.0.0.1)を指定したAレコードを作成します。

こんな感じです。

そして,Let’s Encrypt のページに,ローカルホスト用の証明書を取得するやり方が書かれていますが,それに沿って作業しても,どうも上手くいきません。

Certificates for localhost

このやり方だと,私の環境では,ドメインの解決が出来ずに,コケます

そこで,こちらのページを参照します。

チャレンジにはいくつか種類があるが、今回のようなケースでは「DNS-01」というチャレンジを使う。

Let’s Encrypt と Route 53 でローカル開発環境を HTTPS 化する
$sudo certbot certonly --manual -d {上で設定したドメイン名} --preferred-challenges dns-01

ドメイン名がローカルホストを参照しているかの確認は,digコマンドを使用します。

% dig {ドメイン名}
(略)
{ドメイン名}	3600	IN	A	127.0.0.1

メールアドレスの通知,規約の承認,メルマガの配信設定を問われます。

それぞれ答えます(メルマガの配信は No で良いかな)。

Enter email address (used for urgent renewal and security notices)
agree in order to register with the ACME server. Do you agree?
Would you be willing, once your first certificate is successfully issued,(略)

そうすると,DNSにTXTレコードを設定するように指示されるので,Aレコードを設定したのと同じようにTXTレコードを立てます。

Please deploy a DNS TXT record under the name:
(この下に,TXTのレコード名と内容)

設定し,少し時間を空けて,Enter。

時間を空けすぎると,エラーが返るかもしれません。

その場合は,もう一度,certbotのコマンドを叩きます。

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/{ドメイン名}/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/{ドメイン名}/privkey.pem
This certificate expires on 2022-02-14.
These files will be updated when the certificate renews.

NEXT STEPS:
- This certificate will not be renewed automatically. Autorenewal of --manual certificates requires the use of an authentication hook script (--manual-auth-hook) but one was not provided. To renew this certificate, repeat this same certbot command before the certificate's expiry date.

certbotによって,TXTレコードが確認できると,/etc/letsencrypt/live/ ディレクトリ以下に,証明書が作成されます。

最後に,証明書の有効期限と,自動更新されない旨が表示されます。

それらを確認して,証明書の取得は完了です。

取得した証明書を開発環境で読み込ませれば,SSLアクセスできます。

追記:Permission を変える必要あり(Mac)

Macでしか検証していないので,他の環境では分かりません。

上のコマンドで作成した,/etc/letsencrypt/live/ ディレクトリのパーミッションは下の通りです。

drwx------   4 root  wheel   128 11 16 15:50 live

cd で移動しようとすると,弾かれます。

% cd live 
cd: permission denied: live

なので,パーミッションを,705に変えてあげます。

 % sudo chmod -R 705 live 

これでディレクトリに入れます。

ドメイン名のフォルダの中に証明書があることを確認できるはずです。

% ls
README		cert.pem	chain.pem	fullchain.pem	privkey.pem

もう一個, Permission を変える

live ディレクトリ以下の変更だけでは不十分でした。

/etc/letsencrypt/archive ディレクトリもパーミッションを 705 に設定します。

さらに,その下にある,fullchain1.pemらのパーミッションも 705 に設定します。

それで,証明書を正しく読み込ませた上でhttpsServerをnode.jsで起動すると,無事SSLアクセスできます。

下がその画面です。


 カテゴリ一覧

 雑談(171)
アニメ(19)/ゲーム(12)/ドラマ(3)/パソコン(36)/小説(3)/広島東洋カープ(16)/映画(11)/漫画(33)/音楽(61)
 製作記(89)
AI(4)/CakePHP(3)/CentOS(4)/JavaScript(JS)(9)/Nuxt.js(4)/Vue.js(18)/WordPress(23)/料理(10)