【作成中】【nginx】SSL証明書の設置

  • 投稿者:
  • 投稿カテゴリー:nginx

SSL(Secure Sockets Layer)とは

インターネット上でデータを暗号化して送受信する方法のひとつで、Netscape Communications社が開発したプロトコル
TLS(Transport Layer Security)は、SSLをもとに標準化させたもの

SSL通信の仕組み

調べた結果、概要部分はほとんど「SSLオフ.com」様の転記になりました
Screenshot 2014-09-26 at 00.48.15

SSL暗号化通信の開始要求

・Aさんのブラウザ : httpsで始まるURLへアクセス
 Aさんのブラウザ : 対応可能な暗号化仕様(暗号方式、鍵長、圧縮方式)をネットショップBのウェブサーバへ提示
・ネットショップBのウェブサーバ : Aさんのブラウザとやり取りする暗号化仕様を決定

SSLサーバ証明書の送付(サーバ認証)

・Aさんのブラウザ : ネットショップBのウェブサーバから送られて来たSSLサーバ証明書に偽りがないか?証明書発行局の電子署名から自動判別
 この際に、SSL証明書が自己の正当性を自分で証明できない中間証明局(中間CA)にて認証されていれば、上位のCAに正当性を証明してもらう必要があり、中間証明書が必要となる 
 SSLサーバ証明書に問題なし : SSL暗号化通信の準備開始
 SSLサーバ証明書に問題あり : 警告メッセージ表示

共通鍵の生成

・Aさんのブラウザ : ネットショップBのサーバの間で対応可能な最も強度の高い鍵長(40bit・56bit・128bit・256bit)で共通鍵を生成

共通鍵の暗号化・送付

・Aさんのブラウザ : 共通鍵をネットショップBのサーバの公開鍵(SSLサーバ証明書)で暗号化のうえ、ネットショップBのサーバへ送付
・ネットショップBのサーバ : 共通鍵を秘密鍵(公開鍵とペア)で復号し、共通鍵を取得
・共通鍵を安全にやり取りするために、公開鍵暗号方式が利用される

SSL暗号化通信の開始

・SSL暗号化通信中は、共通鍵暗号方式が利用される
・共通鍵はセッション単位で生成、破棄される

SSL証明書の中身

Screenshot 2014-09-26 at 01.11.09

証明書発行局の電子署名とは

「ウェブサーバの所有者情報と公開鍵」のメッセージダイジェスト(CSR)を、認証局の秘密鍵で暗号化したもの
以下の手法で証明書の正当性を検証する
Screenshot 2014-09-26 at 01.05.41
ハッシュ計算のアルゴリズムについて、SHA-1やSHA-2などがあるが、あと2年ほどでSHA-1は利用できなくなる(脆弱性があるため。ブラウザからエラーが出るようになる)
この脆弱性により、オリジナルの証明書と同一の署名を持つ別の証明書(なりすまし証明書)を生成することができる
http://www.atmarkit.co.jp/ait/articles/1402/05/news117.html
https://www.cybertrust.ne.jp/ssl/sureserver/sha1ms.html
http://news-test.valuessl.net/?p=869

よりプロトコルよりの情報

メッセージの構成は「レコード・プロトコル」として,やりとりの手順は「ハンドシェーク・プロトコル」として規定されている
Screenshot 2014-09-26 at 02.21.37

Screenshot 2014-09-26 at 02.22.24

SSL通信をコマンドラインで

openssl s_client -connect www.google.co.jp:443
GET / HTTP/1.1
openssl s_client -connect ssl.example.org:443 -showcerts

証明書ファイルの内容を確認
# openssl x509 -text -noout -in /[FilePath]/[CertFile]

秘密鍵ファイルの内容を確認
# openssl rsa -text -noout -in /[FilePath]/[KeyFile]

CSRファイルの内容を確認
# openssl req -text -noout -in /[FilePath]/[CSRFile]

SSL証明書の購入

SSL証明書の設置

SSLチェックツール

https://knowledge.rapidssl.com/support/ssl-certificate-support/index?page=content&id=SO9556
https://ssltools.geotrust.com/checker/views/certCheck.jsp
https://sslcheck.globalsign.com/ja/