サーバの証明書に ECC (楕円曲線暗号) を使ってみる


どうも、みむらです。

先日まで海外旅行に行っていまして、
旅行中に SSL 証明書の有効期限が切れたようで、本サーバもエラー連発になっておりました。

本当にすみません。

 

そのようなわけで証明書を更新するのですが、
どうせやるなら最近話題の楕円曲線暗号を使ったやつを使ってみるのもいいんじゃね!
とふと思いましてやってみることに。

これを機にちゃんと勉強したいですね。

作業する OS は CentOS 7.2 です。


1. 秘密鍵を作る。

生成に際し、どのような曲線が使えるのか知っておきたいので、
次のコマンドで調べてみます。

# openssl ecparam -list_curves
  secp384r1 : NIST/SECG curve over a 384 bit prime field
  secp521r1 : NIST/SECG curve over a 521 bit prime field
  prime256v1: X9.62/SECG curve over a 256 bit prime field

というわけで、上記の3つに対応しているということが分かります。

NSA Suite B を参照してみると (https://www.nsa.gov/ia/programs/suiteb_cryptography/
P-384 にするのがいいよ! とのことなので、
今回は secp384r1 を使ってみることにしてみます。

 

注釈:
実は最初、何も見ずに secp521r1 で行ったのですが、
Chrome において ERR_SSL_VERSION_OR_CIPHER_MISMATCH ということで開けなくなることが分かり
再発行を行いました。

http://security.stackexchange.com/questions/100991/why-is-secp521r1-no-longer-supported-in-chrome-others
こういう記述もあったのですが、具体的に書かれている箇所を見つけられず・・
もし、当該する記述の場所をご存じの方はこっそりと教えて下さい・・。

 

生成に必要な情報が分かったところで、
秘密鍵の生成を次のコマンドで行います。

# openssl ecparam -out server.key -name secp384r1 –genkey

 


2. CSR (署名要求, Certificate Signing Request) を作る。

このあたりは RSA の鍵で CSR を作るときと同じような流れです。

# openssl req -new -sha256 -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.

( 意訳:証明書要求に含める情報について答えてください。無回答にしたければ「.」を入力すれば空にもできますよ。)

-----

Country Name (2 letter code) [XX]: JP
State or Province Name (full name) []: Tokyo
Locality Name (eg, city) [Default City]: Taito
Organization Name (eg, company) [Default Company Ltd]: mimumimu.net
Organizational Unit Name (eg, section) []: .
Common Name (eg, your name or your server's hostname): mimumimu.net
Email Address []: customer@mimumimu.net

Please enter the following 'extra' attributes
to be sent with your certificate request

A challenge password []: (何も入れずに Enter )
An optional company name []: (何も入れずに Enter )

 

というわけで CSR が出来ましたので、署名してもらいに行きます。

余談ですが、CSR ファイルの中身はテキストファイルになっていまして、

-----BEGIN CERTIFICATE REQUEST-----
MIIB44KE44GCIO+8iMK044O7z4njg7vvvYApDQrjgojjgYbjgZPjgZ3jgIHjg5Dj
g7zjg5zjg7Pjg4/jgqbjgrnjgbjjgILjgZPjga7jg4bjgq3jg7zjg6njga/jgrXj
g7zjg5PjgrnjgaDjgYvjgonjgIHjgb7jgZrpo7LjgpPjgafokL3jgaHnnYDjgYTj
gabmrLLjgZfjgYTjgIINCuOBhuOCk+OAgeOAjOOBvuOBn+OAjeOBquOCk+OBoOOA
gua4iOOBvuOBquOBhOOAguS7j+OBrumhlOOCguOBo+OBpuiogOOBhuOBl+OBreOA
geisneOBo+OBpuioseOBl+OBpuOCguOCieOBiuOBhuOBqOOCguaAneOBo+OBpuOB
hOOBquOBhOOAgg0KDQrjgafjgoLjgIHjgZPjga5DU1LjgpLopovjgZ/jgajjgY3j
gIHlkJvjga/jgIHjgY3jgaPjgajoqIDokYnjgafjga/oqIDjgYTooajjgZvjgarj
gYQg44CM44Go44GN44KB44GN44CN44G/44Gf44GE44Gq44KC44Gu44KS5oSf44GY
-----END CERTIFICATE REQUEST-----

こんな感じのファイルになっています。 (もちろん、上記のテキストはサンプルですよ!)

 


3.CA (認証局, Certification Authority) に署名してもらう。

ここから先、導入まではすべて通常の RSA での SSL 証明書の手続きと同一ですので、

残りの説明はすべて comodo の公式マニュアルにゆだねます・・!
http://comodo.jp/beginner/setup.html


..というわけで設定が完了しますと、

image

このような感じで、楕円曲線暗号を使用した通信が出来るようになります。

 

ブームに乗れた中二病的なうれしさを感じつつ、
金岡先生の資料 ( http://www.jnsa.org/seminar/pki-day/2011/data/02_kanaoka.pdf ) を
拝読して、これを機に学んでみたいと思います・・!


 

関連記事