再利用と変更のしやすさのため、スクリプトにまとめた。
Vagrant と Docker での実行方法も記載してある。
ブログ記事や StackOverflow の投稿をたくさん読んだが、中でもこの二つが特に役に立った。
- 自己署名証明書の作り方とnginxの設定まで。 - 自由帳
- OpenSSLで自己署名証明書を作成する(複数ホスト名:SAN/Subject Alternative Name設定付き) - CLOVER🍀
学び・ハマったところ
- subjectAltName(SAN)を指定する場合は
-extfile
オプションを使う -extfile
オプションを指定する場合は証明書要求(.csr
)を作る手順をスキップできない-subj
は/
で始まる必要がある(空文字列は NG)。-subj "/"
でも可。- SAN を指定すると CommonName(CN)は無視される
- だからといって
-subj "/"
と CN 未指定で作った証明書を nginx にサーバ証明書としてインストールすると HTTPS リクエスト受信時に以下のようなエラーが発生するcurl: (60) Issuer certificate is invalid.
curl: (60) SSL certificate problem: self signed certificate
curl -v --cacert sample.crt https://example.local/ * Trying 127.0.0.1:443... * TCP_NODELAY set * Connected to example.local (127.0.0.1) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: sample.crt CApath: /etc/ssl/certs * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (OUT), TLS alert, unknown CA (560): * SSL certificate problem: self signed certificate * Closing connection 0 curl: (60) SSL certificate problem: self signed certificate More details here: https://curl.haxx.se/docs/sslcerts.html curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.