読者です 読者をやめる 読者になる 読者になる

SSL証明書をECDSAで取得してみた。

同人サークル(もじずり技術会)の共同開発をスムーズにするべく自前のGitサーバを立てることにしました。
身内だけで使うものですので、多少互換性は低くともECDSAなSSL証明書を取得してみることにします。


まずは先例にならって使用可能なリストを確認します。

$ 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


今回はsecp384r1を選択して、秘密鍵とCSRを生成します。

$ openssl ecparam -out <秘密鍵の名前>.key -name secp384r1 -genkey
$ openssl req -new -sha384 -key <秘密鍵の名前>.key -out <CSRの名前>.csr


CSRが意図通り作成されているか確認します。

$ openssl req -in <CSRの名前>.csr -text

f:id:shukukei:20170506000952p:plain


作成したcsrをコピーアンドペーストで、今回はCOMODOさんのPositiveSSLで申請。
数分後、送られてきたサーバ証明書と中間証明書をサーバにインストールして完了。
f:id:shukukei:20170506001349p:plain


Perfect Forward Secrecyにしたいので、SSLCipherSuiteに設定できる値を調べてみる。

$ openssl ciphers -v 'EECDH+AESGCM:AES256+EECDH:AES128+EECDH'
  ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
  ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256) Mac=AEAD
  ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD
  ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(128) Mac=AEAD
  ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA384
  ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA384
  ECDHE-RSA-AES256-SHA    SSLv3 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA1
  ECDHE-ECDSA-AES256-SHA  SSLv3 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA1
  ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA256
  ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA256
  ECDHE-RSA-AES128-SHA    SSLv3 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA1
  ECDHE-ECDSA-AES128-SHA  SSLv3 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA1


実験のために一つに絞る形で以下のように設定してみました。

SSLProtocol -all +TLSv1.2
SSLHonorCipherOrder on
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384
SSLCompression off

# OCSP Stapling
SSLUseStapling on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache shmcb:/run/httpd/ocsp(128000)

<VirtualHost ***>
Header always set Strict-Transport-Security "max-age=15768000"
</VirtualHost>


上手く動いてくれているようです。
f:id:shukukei:20170506014323p:plain
f:id:shukukei:20170506014328p:plain