はじめに
RSA じゃなくて ECDSA で作るところが拘り。
はりきって ECDSA 521bit で鍵を生成して設定しようとしてドハマリした。
384bitで生成しよう
521bit だとブラウザが対応していなくて ERR_SSL_VERSION_OR_CIPHER_MISMATCH
とか言われると思います。
nginx の設定
server {
listen 443 ssl;
server_name _;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_ecdh_curve secp384r1;
}
各種生成コマンド
登場人物の整理
- 秘密鍵
- *.key *.pem
- 証明書署名要求(公開鍵)
- *.csr
- サーバ証明書
- *.crt *.cer
順に生成していく。
秘密鍵
今回は ECDSA 384bit な鍵を生成する。
# openssl ecparam -name secp384r1 -genkey -out server.key
使用できる楕円曲線の一覧は openssl ecparam -list_curves
で確認ができる。
( 実際に使用されるのは prime256v1
, secp384r1
辺り )
証明書署名要求
# openssl req -new -sha256 -key server.key -out server.csr
サーバ証明書
# openssl x509 -days 36500 -req -signkey server.key < server.csr > server.crt
各種確認コマンド
秘密鍵の確認
$ openssl ecparam -text -noout -in server.key
証明書署名要求の確認
$ openssl req -text -noout -in server.csr
サーバ証明書の確認
$ openssl x509 -text -noout -in server.crt
参考