自己署名証明書の作り方とnginxの設定まで。

いわゆるオレオレ証明書の作り方。

最近、ちょっとしたことを確認しようとしても、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を編集する。

  • portをHTTPSの443に変更する。
  • 証明書(*.crt)を設定する
  • 秘密鍵(*.key)を設定する
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の場合の手順

  1. *.crtを右クリックして、「証明書のインストール」
  2. 保存場所はそのまま(変更してもよいが)で「次へ」
  3. 「証明書をすべて次のストアに配置する」を選択して「参照」、「信頼されたルート証明期間」を選択して「OK」を押し、「次へ」を押す。
  4. 「完了」を押す。

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