ローカルでマップ表示を使うウェブアプリの開発をしてると、SSL環境でないとgetCurrentPosition()や watchPosition() がうまく動かないので、ローカルにLet’s EncryptでのSSL環境を導入しました。
※ chromeをオプションつけて起動する方法もあるみたいで、こちらのやり方の方が簡単かもしれないです。
localhostでSSLが必須の機能を使用する | egashira.jp
※ 環境はmacです
Let’s EncryptでSSL環境を作る方法
Let’s EncryptのSSL証明書をDNS認証で発行してみた。(DNSはお名前.com) – Qiita
を参考に進めました。
ページ内のXXXXXXX.xxxはlocalhostとか127.0.0.1とかローカルのドメイン部分を指定すればOK
はまったポイント
DNS TXT recordの承認に2分くらい時間かかる
_acme-challenge.XXXXXXX.xxxというTXTレコードをDNS情報を編集して設定してから、Enter押して進めるのですが、TXTレコードを変更してから少し時間立った後でないと認証がうまくいきませんでした。
管理者権限でないとアクセスできない
作られた証明書は管理者権限でないとアクセスできないです。
# ls -l /etc/letsencrypt/live/XXXXXXX.xxx/
node.jsでウェブアプリを作ってるのですが、ローカルで作られたSSL証明書のファイルを読み込むためにchmodでファイルのアクセス権限を変更しました。
nodeJSではこんなコードで証明書を読み込んでます
多分、よりいいコードがあると思うのですが、とりあえず下記のコードで動いてます。
if ( app.get('env') == 'development' ) {
// SSL
const serverKeyPath = "/etc/letsencrypt/live/XXXXXXX.xxx/privkey.pem";
const serverCrtPath = "/etc/letsencrypt/live/XXXXXXX.xxx/fullchain.pem";
const httpsPort = 8443;
server = https.createServer({
key: fs.readFileSync(serverKeyPath),
cert: fs.readFileSync(serverCrtPath),
}, app);
server.listen(httpsPort, () => {
console.log(`Listening HTTPS on ${httpsPort}...`);
});
}
Let’s Encryptは3ヶ月ごとに更新しないといけないので、メモ投稿でした。