Last Modified:
完全HTTPS化しました #CMS
元々HTTPSは実験も兼ねてプライベート用途でStartSSLを使っていたんですが、 今回証明書の更新時期が来たのでふと思い立って完全HTTPS化しました。
証明書の更新
すごく簡単な証明書更新の流れ
基本的にStartComでお手軽SSL証明書を維持する(更新編) を見てやればOKです。
StartSSLにログイン
メールアドレス確認
メールアドレス宛に認証コードが送信されることで、生きているかどうかを確認されます。
ドメイン確認
ドメインのメールアドレス宛に認証コードが送信されることで、所有者かどうかを確認されます。
ログイン証明書を取得
StartSSLはこの証明書を使ってログインするのです。バックアップしておきましょう。
ハマったポイント
証明書は期限切れの2週間前から(StartSSLからのExpiration通知が届いてから)でないと更新できません。 エラーメッセージが確か「確認済みのメールアドレスが無いよ」みたいなメッセージだったので全く意味が分かりませんでした。 ハマったポイントです。
サーバー証明書(と鍵)を取得
NGINXに適用
パス無しの鍵を作る。
$ openssl rsa -in server.key -out nopass-server.key
中間証明書をくっつける。
$ cat server.crt sub.class1.server.ca.crt 1>with-ca-server.crt
いざテスト!
$ nginx -c nginx.conf -t
PEM_read_bio_X509_AUX("with-ca-server.crt") failed (SSL: error:0906D066:PEM routines:PEM_read_bio:bad end line)
nginx: configuration file nginx.conf test failed
ハマったポイント2
with-ca-server.crtを見たところ、中ほどに-----END CERTIFICATE----------BEGIN CERTIFICATE-----
という1行が。
どうやらStartSSLからserver.crtをコピペするときにEOFの改行を付け忘れた模様。
ついでに改行コードもCRLFになっちゃってたのでdos2unixでもしよか。
$ dos2unix
-bash: dos2unix: command not found
ハマったポイント3
dos2unixが無かったのでperlでサクッと修正。ついでにalias化。
alias any2unix="perl -pe 's/\r\n|\r|\n/\n/g' -i'*' --"
alias any2dos="perl -pe 's/\r\n|\r|\n/\r\n/g' -i'*' --"
alias any2mac="perl -pe 's/\r\n|\r|\n/\r/g' -i'*' --"
テストが通って無事にサーバー再起動。
ブラウザから確認すると…あれ?鍵マークが付かない!
ハマったポイント4
鍵マークが付かないというよりは、見慣れた緑色ではなく「セキュリティが弱い」とか言われてる。
ぐぐってみると、中間証明書がSHA1なのが原因だとのこと。
https://code.google.com/p/chromium/issues/detail?id=473105#c33 からClass 1の方をsub.class1.server.sha2.ca.crtという名前で保存して、 改めて証明書を作成。
$ cat server.crt sub.class1.server.sha2.ca.crt 1>with-ca-server.crt
サーバー再起動すると無事に鍵マークが付きました。
完全HTTPS化
できたけどSNSカウントは0になってしまった。まあ元々ほとんど0だったから別にいいや。
はてブリストだけはHTTP版とHTTPS版を混ぜて表示してます。 (ユーザーアイコンがHTTPSで取れないのでアイコン表示は一旦外しました)
ところで今更ですが、Let's Encryptに乗り換えようと思ってます。
というわけで次のStartSSLの更新は無いので、この記事は意味が無いのであった。