ふと、SSLのオレオレ証明書どうにかならんかなと思った。
そういえば無料のSSL証明書発行サービスあったよね。と思って調べたらあった。
StartSSL
無料以外でもやってるのだが、無料でもLevel1というもっとも低級な認証はうけられるのが特徴ではある。
高級な証明書も作っていて、EV証明書まで発行できるようだ。たったの149.9USDだと言っているが結構値が張る。
一応Mozilla関係ではCA証明書が内蔵されているようなのでそれなりに使いやすそうではある。
LibserverはSSLでアクセスする人僕ぐらいだからいらん気もしたが、別のところであるからなぁ。
というわけで登録しよう。
詳しい解説があるのでそれを見ながらやった。
無料 SSL 証明書 StartSSL を使う (futuremix)
さて、まずは個人証明書が作られるので、これをブラウザに取り込む。これをログインに使うようだ。
このあたりはSSHの公開鍵認証に似てますよね。
次にドメインの認証を行います。トップレベルドメインの認証しかできないようです。
だからドメインの所有者以外は証明書を打ち出せないと言うことだ。おー、ドメイン取っててよかった。
そういえばSSLってドメインで認証を行うことが多いらしいですね。有料でも安いやつはそうらしい。
かの有名なVeriSignは団体が登記されてるかとか、電話で団体に意志を確認したりするそうで、この厳格さがウリらしい。
まぁそれはそうと、そんなものは商売するとかでなければいらないと言えるので、ドメインで認証すればよろしい。
Whoisの登録してあるメールアドレスとかにメールを投げてもらうという方法で認証してもらった。
Validations Wizard で Domain Name Validation を選んでやってもらえばいい。
これで証明書に署名してもらえるようになった。というわけで鍵とCSRを作った。(参考記事 : SSLの鍵を打ち出す単純な方法)
# /etc/pki/tls/misc/CA -newreq
これで鍵を作ってnewreq.pemの内容をコピペして渡せばいい。
ただStartSSLでは鍵の長さは2048bit以上であることを要求しているのでopenssl.cnfを変更しなければならなかった。
[ req ]
default_bits = 2048
default_md = sha1
まぁこれぐらいの設定はしておけよということです。なぜか元が1024bitだったので怒られた。
用意したらCertificate WizardでSSL/TLS Web Serber Certificateを選んでやる。
向こうで鍵も作ってもらうという方法はあるが、それはなぁと思ったのでそこはSkipして、CSRとしてnewreq.pemの中身をコピペして渡した。
できたらその証明書の内容をコピペして、newcert.pemとでもして保存しておこうか。
実は僕はここでドジをして、鍵を消してしまったのよ。あーあ。
というわけでやりなおそうと思ったのだが、同じドメインでは30日内には署名し直せないよと言われたので、前の証明書を失効させてもらうことに。
Tool BoxのRevocation Requestを選んで、そのCertificateでその証明書を選ぶ。
そしてReasonだが、これはまじめに書かんといかんかったようだ。
自動だと思っていい加減に書いたら「ちゃんと理由教えて」って英語でメールが届いた。
自動じゃなくて手動なんだね。というわけで「リクエストした後で鍵を消してしまったから」ということを送ったらすぐに失効させてくれた。
本当に申し訳ない。それで改めてやり直しました。
さて、設定だが、ちょっと注意しなければならないことがある。
この与えられた証明書は中間CAにより認証されている。すなわちその構図を示すと、
StartComのルートCA ―署名→ Class1用の中間CA ―署名→ 発行された証明書
というわけでこれをちゃんと設定しないといけない。特に中間CAは重要。
Tool BoxのStartCom CA Certificatesから StartCom Root CA(PEM encoded) と Class 1 Intermediate Server CA をダウンロードしておく。
それぞれ同じディレクトリに ca.pem , sub.class1.server.ca.pem としておく。
その上でApacheの設定。まぁこれはStartSSLのページにもありますけど。
SSLCertificateFile /etc/pki/tls/certs/newcert.pem
SSLCertificateKeyFile /etc/pki/tls/certs/newkey2.pem
SSLCertificateChainFile /etc/pki/tls/certs/sub.class1.server.ca.pem
SSLCACertificateFile /etc/pki/tls/certs/ca.pem
newkey2.pemは以前の記事で書いた、パスワードを解除した鍵ファイルね。
中間CA証明書の設定を忘れてはならないと言うことです。
Apacheについては書いてあるんだが、DovecotとPostfixについてはないので少し悩んだ。
まずDovecotの設定はこんな感じ。
ssl_cert_file = /etc/pki/tls/certs/newcert.pem
ssl_key_file = /etc/pki/tls/certs/newkey2.pem
ssl_ca_file = /etc/pki/tls/certs/sub.class1.server.ca.pem
CA証明書のところに中間CA証明書を入れればうまいこといった。
Postfixも実のところ同様で、
smtpd_tls_cert_file = /etc/pki/tls/certs/newcert.pem
smtpd_tls_key_file = /etc/pki/tls/certs/newkey2.pem
smtpd_tls_CA_file = /etc/pki/tls/certs/sub.class1.server.ca.pem
これで使えるようになりました。
というわけでテストページを作ってみたから、試しにアクセスしてみてください。
https://hdmr.org/ssl.php
多分何も言われずにアクセス出来たはず。オレオレ証明書の場合はこうもいかない。
PHPで $_SERVER["HTTPS"]==’on’ であるか確かめているのでHTTPSでしかアクセス出来ないはず。
見ますと、証明書のOとOUが書き換えられてる。Class1はさすがにこのあたりの扱いは悪い。
まぁ確かに団体の実在性確認とかはしてないわけですから、このあたりは当然と言えば当然ですが。
有効期間は1年間のようですね。毎年打ち直す必要があるらしい。これも普通ですね。
Apacheにcertwatchっていうユーティリティがあるので一ヶ月前になったら知らせてくれますから、そのときには作り直せばいいわけですね。
HTTPSを使っておもしろいことができたらいいですけど、何ができるだろうか。
それなりに使えるSSL証明書がこうやって作れることがわかっただけでよしとするか。