jiyuujin is united with the people of Ukraine and the international community.

当記事は公開されてから 1 年以上経過している記事です。

「オレオレ自己署名 SSL 証明書を作る」の改善提案など気軽にご協力いただければ幸いです。

Issue はこちらでよろしくお願いします: https://github.com/jiyuujin/webneko-blog/issues

オレオレ自己署名 SSL 証明書を作る
7/7/2021
SSL
HTTPS
OpenSSL
mkcert

平日朝にやっているおはようエンジニアの中で触れられたオレオレ自己署名 SSL 証明書。昨今 localhost 環境で HTTPS へアクセスすることも普通となった。

OpenSSL を使って Web ブラウザに信用させる

OpenSSL コマンドによる RSA 公開鍵暗号を利用すると今いるディレクトリに server.keyserver.crt を生成してくれる。

openssl req \
   -newkey rsa:2048 \
   -x509 \
   -nodes \
   -keyout server.key \
   -new \
   -out server.crt \
   -subj /CN=localhost \
   -reqexts SAN \
   -extensions SAN \
   -config <(cat /etc/ssl/openssl.cnf \
       <(printf '[SAN]\nsubjectAltName=DNS:localhost,IP:192.168.0.1')) \
   -sha256 \
   -days 3650
  • キーチェインアクセスで server.crt をドラッグ & ドロップする
  • いずれの Trust も Always Trust に変更する

server.keyserver.crt と同じディレクトリで https://localhost:3000 に HTTPS のサーバーが起動する。

echo -e 'const https = require("https");\nconst fs = require("fs");\n\nconst serverKeyPath = "server.key";\nconst serverCrtPath = "server.crt";\nconst httpsPort = 3000;\n\nhttps.createServer(\n  {\n    key: fs.readFileSync(serverKeyPath),\n    cert: fs.readFileSync(serverCrtPath),\n  },\n  (req, res) => {\n    res.end("hello, world");\n  }\n).listen(httpsPort, () => {\n  console.log(`Listen HTTPS on ${httpsPort}...`);\n});\n' | node

起動スクリプト

const https = require("https");
const fs = require("fs");

const serverKeyPath = "server.key";
const serverCrtPath = "server.crt";
const httpsPort = 3000;

https.createServer(
  {
    key: fs.readFileSync(serverKeyPath),
    cert: fs.readFileSync(serverCrtPath),
  },
  (req, res) => {
    res.end("hello, world");
  }
).listen(httpsPort, () => {
  console.log(`Listen HTTPS on ${httpsPort}...`);
});

mkcertを使いゼロコンフィグで信用させる

mkcert を使えば 3 分で SSL 証明書を作れる。

FiloSottile/mkcert

brew install mkcert

# For Firefox
brew install nss

mkcert -install

ルート /Users/<USER_NAME> にキー、証明書が生成されていることを確認する。

mkcert example.com "*.example.com" example.test localhost 127.0.0.1 ::1

生成済のキー、証明書を付けるビルドオプションを利用して localhost を起動する。

# Gatsby
gatsby dev --key-file ~/example.com+5-key.pem --cert-file ~/example.com+5.pem --https

これで localhost の HTTPS 化が実現した。

(2300 characters)

あわせてよみたい..