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

woshidan's blog

そんなことよりコードにダイブ。

SSL/TSLについて少し勉強しました

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が利用出来る暗号スイートの一覧が見れます。

d.hatena.ne.jp

$ 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
    • SSL証明書の詳細情報を見たら出てくる情報を入力していきます
    • 証明書を入れるサーバーのFQDNも入れます
    • ここのコマンドで証明書の作成に使うハッシュ関数SHA1かSHA2か指定します
  • 作成した公開鍵を証明書を発行する会社に送ります
  • 証明書がサーバ証明書の会社から発行されます
  • サーバー証明書と中間証明書を連結させてpemファイルを作ってサーバーにアップロードします
    • cf. cat サーバー証明書 中間証明書 > 連結ファイル.pem
  • サーバーにアップロードした連結ファイルの場所をssl_certificate(nginxの場合)のディレクティブにフルパスで指定します
  • 秘密鍵ファイルもサーバーにアップロードして、その場所をssl_certificate_key(nginxの場合)のディレクティブにフルパスで指定します
  • webサーバ(nginxなど)の再起動をして、SSLで通信できているか確認します

プロトコルのバージョンと利用出来る公開鍵証明書のハッシュ関数について

接続したいサービスごとにこのハッシュ関数で作った証明書でないとだめですよ、とか、このバージョンのプロトコルを使ってはダメですよ、といった設定がされていることがあります。

また、OSやブラウザの設定により、公開証明書のハッシュ関数が古いと正式な証明書でも不正な証明書と表示されたり、URLバーに警告が表示されることがあります。

postd.cc

今なら少し自信を持ってオレオレ証明書が作れそうな気がしてきました...