OpenSSL1.0.0で楕円曲線志向なサーバ証明書を作る

楕円曲線を用いた暗号方式でサーバ証明書を作ろう、というお話。

ユーザが証明書署名要求を作るまで

# openssl ecparam -genkey -name prime256v1 -out server.pem
# openssl ec -in server.pem -out server.des.pem -des

先ほどは知らなかったので書き損ねたけれど、openssl1.0.0ではecサブコマンドからec鍵対をDES暗号化することが可能。passphraseを使用/記述できる環境で使うのであれば暗号化しておいた方が安全になる。

# openssl req -new -key server.des.pem -out server.req.csr

で、これを署名してくれる人に送る。
一般的な注意として、Organization Nameに認証先と同じものを入力すること・Common NameにサーバのFQDNを入力すること、の二つがある。

CAが証明書をサインしてユーザに送り返すまで

ここの操作はecであろうと関係ないので、普通に。

# openssl ca -keyfile cakey.pem -cert cacert.cer -md sha256 -out newcert.pem -infiles server.req.csr

なお、-mdはhelpにsha1までしか載っていないが、実際にはsha256を指定できる模様。-mdを指定しないとsha1になる。設定ファイルでCA鍵対やsign用証明書を設定していれば-keyfileや-certのオプションは不要。

これまでCAがやるべきかどうかはわからないけど、証明書の部分だけを出力するためには、

# openssl x509 -in newcert.pem -out server.crt

とする。これでnewcert.pemから普通の公開鍵部分だけ取り出せる。

そしてserver.crtをサーバ証明書として活用する。