いわゆるオレオレ証明書の作り方。
最近、ちょっとしたことを確認しようとしても、https化が必須になっている。 パブリックなネットワークだとLet's Encryptを使うべきなんだけど、 Let's Encryptではドメインが必須なので、ドメインが容易できないと使えない。 またローカルで試したいときなどはオレオレ証明書のほうが便利だったりもするので、 オレオレ証明書が欲しいときもある。
そんなわけでオレオレ証明書の作り方からnginxの設定まで手順を残しておく。
ちなみにlocalhostだと有効な証明書は作れなかったが、127.0.0.1の証明書ならできた。
秘密鍵と証明書を作成する。
IP=127.0.0.1 echo "subjectAltName = IP:${IP}" > san.txt # gen private key 秘密鍵を作成する。 openssl genrsa -out ${IP}.key 2048 # gen CSR 署名要求(公開鍵を含む)を作成する。 openssl req -new -key ${IP}.key > ${IP}.csr # gen CRT 公開鍵を秘密鍵で署名して、証明書を作成する。 openssl x509 -in ${IP}.csr -out ${IP}.crt -req -signkey ${IP}.key -days 3650 -extfile san.txt
CSRを作成時には多少入力が必要だが、common nameにIPを入れておくくらい?
nginxのHTTPS化
/etc/nginxに証明書と秘密鍵を配置する。(Ubuntu)
sudo mv 127.0.0.1.crt /etc/nginx sudo mv 127.0.0.1.key /etc/nginx
/etc/nginx/conf.d/default.confを編集する。
server { listen 443 ssl http2 default_server; ssl on; ssl_certificate 127.0.0.1.crt; ssl_certificate_key 127.0.0.1.key; (省略)
せっかくなのでHTTP/2も有効にしている。
tomcat8のHTTPS化
一緒にHTTPS化したのでメモ。
/var/lib/tomcat8/conf/server.xml
<!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2 This connector uses the APR/native implementation which always uses OpenSSL for TLS. Either JSSE or OpenSSL style configuration may be used. OpenSSL style configuration is used below. --> <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" maxThreads="150" SSLEnabled="true" > <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" /> <SSLHostConfig> <Certificate certificateKeyFile="/etc/nginx/127.0.0.1.key" certificateFile="/etc/nginx/127.0.0.1.crt" certificateChainFile="/etc/nginx/127.0.0.1.crt" type="RSA" /> </SSLHostConfig> </Connector>
利用者の端末にオレオレ証明書をインストールする。
HTTPS化したサーバにアクセスする端末すべてにオレオレ証明書(*.crt)は事前にインストールしておくする必要がある。
Windowsの場合の手順
- *.crtを右クリックして、「証明書のインストール」
- 保存場所はそのまま(変更してもよいが)で「次へ」
- 「証明書をすべて次のストアに配置する」を選択して「参照」、「信頼されたルート証明期間」を選択して「OK」を押し、「次へ」を押す。
- 「完了」を押す。
Ubuntuの場合の手順
$ sudo cp 127.0.0.1.crt /etc/ssl/certs/ $ sudo update-ca-certificates
接続確認
Chromeでアクセスして鍵付きになればOK。
HTTP2を有効化していればHTTP/2 and SPDY indicatorの雷も青くなる。 https://chrome.google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin?hl=en