SSL/TSLについて少し勉強しました
内容
SSL/TSLで使うプロトコルの設定について
SSL/TSLの利用はApacheやnginxなどのWebサーバのソフトの設定を通して有効にできます。 また、これらのソフトが動くサーバのOSのバージョンによっては一部のプロトコルが利用できない場合があります。
SSL/TSLの暗号化のアルゴリズムの指定は暗号スイートの単位で行います。
暗号スイートというのは、通信の暗号化に使うアルゴリズムはこれ、鍵交換に使うアルゴリズムはこれ、といった風に通信の各部の暗号化プロトコルの組み合わせのことです。
// Apacheの場合 SSLCipherSuite DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:CAMELLIA128-SHA:AES128-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:CAMELLIA256-SHA:AES256-SHA
// nginxの場合 ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
openssl ciphers
で、そのコンピュータに入っているopensslが利用出来る暗号スイートの一覧が見れます。
$ openssl ciphers -v DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1 DHE-DSS-AES256-SHA SSLv3 Kx=DH Au=DSS Enc=AES(256) Mac=SHA1 AES256-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA1 EDH-RSA-DES-CBC3-SHA SSLv3 Kx=DH Au=RSA Enc=3DES(168) Mac=SHA1 EDH-DSS-DES-CBC3-SHA SSLv3 Kx=DH Au=DSS Enc=3DES(168) Mac=SHA1 DES-CBC3-SHA SSLv3 Kx=RSA Au=RSA Enc=3DES(168) Mac=SHA1 DES-CBC3-MD5 SSLv2 Kx=RSA Au=RSA Enc=3DES(168) Mac=MD5 DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1 DHE-DSS-AES128-SHA SSLv3 Kx=DH Au=DSS Enc=AES(128) Mac=SHA1 AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1 DHE-RSA-SEED-SHA SSLv3 Kx=DH Au=RSA Enc=SEED(128) Mac=SHA1 DHE-DSS-SEED-SHA SSLv3 Kx=DH Au=DSS Enc=SEED(128) Mac=SHA1 SEED-SHA SSLv3 Kx=RSA Au=RSA Enc=SEED(128) Mac=SHA1 RC2-CBC-MD5 SSLv2 Kx=RSA Au=RSA Enc=RC2(128) Mac=MD5 RC4-SHA SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=SHA1 RC4-MD5 SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5 RC4-MD5 SSLv2 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5 EDH-RSA-DES-CBC-SHA SSLv3 Kx=DH Au=RSA Enc=DES(56) Mac=SHA1 EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH Au=DSS Enc=DES(56) Mac=SHA1 DES-CBC-SHA SSLv3 Kx=RSA Au=RSA Enc=DES(56) Mac=SHA1 DES-CBC-MD5 SSLv2 Kx=RSA Au=RSA Enc=DES(56) Mac=MD5 EXP-EDH-RSA-DES-CBC-SHA SSLv3 Kx=DH(512) Au=RSA Enc=DES(40) Mac=SHA1 export EXP-EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH(512) Au=DSS Enc=DES(40) Mac=SHA1 export EXP-DES-CBC-SHA SSLv3 Kx=RSA(512) Au=RSA Enc=DES(40) Mac=SHA1 export EXP-RC2-CBC-MD5 SSLv3 Kx=RSA(512) Au=RSA Enc=RC2(40) Mac=MD5 export EXP-RC2-CBC-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC2(40) Mac=MD5 export EXP-RC4-MD5 SSLv3 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export EXP-RC4-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export
上記の一覧の一行分の内容の意味は、
暗号スイートの名前 プロトコルのバージョン 鍵交換の方法(KeyeXchange) サーバ認証の方法(Authentication) 暗号化の方法(Encryption) HMAC(Message Authentication Code)のハッシュアルゴリズム
となります。
理解してるつもりの SSL/TLS でも、もっと理解したら面白かった話 · けんごのお屋敷
SSL証明書のインストールの大まかな流れ
SSL/TSLを有効にするには、サーバの身元を保証するSSL証明書をサーバにインストールする必要があります。
https://www.cybertrust.ne.jp/sureserver/support/tec_download.html#01
上記の資料を参考におおまかな手順をまとめると、下記のようになります。
openssl genrsa
コマンドで秘密鍵ファイルを作成cf. openssl genrsa -aes256 -out server.key 2048
openssl req
コマンドで秘密鍵ファイルからCSR(公開鍵)ファイルを作成cf. openssl req -new -key server.key -out server.csr
- 作成した公開鍵を証明書を発行する会社に送ります
- 証明書がサーバ証明書の会社から発行されます
- 中間CA証明書とサーバー証明書があります
- サーバー証明書と中間証明書を連結させてpemファイルを作ってサーバーにアップロードします
cf. cat サーバー証明書 中間証明書 > 連結ファイル.pem
- サーバーにアップロードした連結ファイルの場所を
ssl_certificate(nginxの場合)
のディレクティブにフルパスで指定します - 秘密鍵ファイルもサーバーにアップロードして、その場所を
ssl_certificate_key(nginxの場合)
のディレクティブにフルパスで指定します - webサーバ(nginxなど)の再起動をして、SSLで通信できているか確認します
プロトコルのバージョンと利用出来る公開鍵証明書のハッシュ関数について
接続したいサービスごとにこのハッシュ関数で作った証明書でないとだめですよ、とか、このバージョンのプロトコルを使ってはダメですよ、といった設定がされていることがあります。
また、OSやブラウザの設定により、公開証明書のハッシュ関数が古いと正式な証明書でも不正な証明書と表示されたり、URLバーに警告が表示されることがあります。
今なら少し自信を持ってオレオレ証明書が作れそうな気がしてきました...