記事

Last Modified:

完全HTTPS化しました #CMS

元々HTTPSは実験も兼ねてプライベート用途でStartSSLを使っていたんですが、 今回証明書の更新時期が来たのでふと思い立って完全HTTPS化しました。

証明書の更新

すごく簡単な証明書更新の流れ

基本的にStartComでお手軽SSL証明書を維持する(更新編) を見てやればOKです。

  1. StartSSLにログイン

  2. メールアドレス確認

    メールアドレス宛に認証コードが送信されることで、生きているかどうかを確認されます。

  3. ドメイン確認

    ドメインのメールアドレス宛に認証コードが送信されることで、所有者かどうかを確認されます。

  4. ログイン証明書を取得

    StartSSLはこの証明書を使ってログインするのです。バックアップしておきましょう。

    ハマったポイント

    証明書は期限切れの2週間前から(StartSSLからのExpiration通知が届いてから)でないと更新できません。 エラーメッセージが確か「確認済みのメールアドレスが無いよ」みたいなメッセージだったので全く意味が分かりませんでした。 ハマったポイントです。

  5. サーバー証明書(と鍵)を取得

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の更新は無いので、この記事は意味が無いのであった。