SSL/TLS の変更点


#author("2023-07-11T20:08:05+09:00","default:k1rou","k1rou")
#author("2023-07-11T20:09:17+09:00","default:k1rou","k1rou")
*SSL/TLS とは [#ddd20f05]
-インターネット上で使われているデータ暗号化通信プロトコル。
-サーバとクライアント間を安全に通信できるようにするプロトコル。

-当初は[[SSL]]として標準化が行われていたが、[[TLS]]として標準化が行われるようになった
--SSLからTLSへの移行が進められた
--SSLは全バージョンで非推奨となっている
--TLSはSSLバージョン3.0に基づいて標準化された規格

-[[IETF]]によって標準化が行われている

*SSL/TLSの機能 [#a0b4d41f]
**[[暗号化]] [#md86108c]
-[[共通鍵暗号方式]]に基づく暗号化機能

**認証 [#s3ab964a]
-公開鍵証明書に基づく認証機能

**改ざん検知 [#c3e5ab30]
-ハッシュ用共通鍵に基づく改ざん検知機能
-ドメイン所有者とサーバー管理者の同一性証明
-ドメイン所有者の物理的実在証明(EV証明書に限定)

*対応するアプリケーション層のプロトコル [#d72f1855]
|  | プロトコル(平文) | ポート番号(平文) | プロトコル(SSL/TLS) | ポート番号(SSL/TLS) |h
| HTTP over SSL/TLS | [[HTTP]] | 80 | HTTPS | 443 |
| SMTP over SSL/TLS | [[SMTP]] | 25 | SMTPS | 465 |
| FTP(data) over SSL/TLS | [[FTP]](データ転送用) | 20,1024以上 | FTPS | 988 |
| FTP(control) over SSL/TLS | [[FTP]](制御用) | 21 | FTPS | 990 |
| Telnet over SSL/TLS | [[Telnet]] | 23 | TELNETS | 992 |
| POP over SSL/TLS | [[POP3]] | 110 | POP3S | 995 |
| IMAP over SSL/TLS | [[IMAP4]] | 143 | IMAPS | 993 |
| LDAP over SSL/TLS | [[LDAP]] | 389 | LDAPS | 636 |

**HTTP over SSL/TLS [#u6bfc529]
-SSLまたはTLSによって確立されたセキュアな通信経路上で行われるHTTP通信の仕組みのこと
-[[HTTP]]でSSL/TLSを使ったプロトコルは「[[HTTPS]]」。
-URIスキーム:https

*SSL通信のフロー [#qb394114]
+Webブラウザが行う[[サーバ証明書]]の正当性の検証
--証明書の検証
--証明パスの検証
--有効期限の検証
--失効リストの検証
--ドメインの検証
---アクセス先の[[FQDN]]と[[サーバ証明書]]のコモンネームが一致していることの確認
--[[サーバ証明書]]が信頼できる認証機関から発行されていることの確認
+鍵の交換
--[[公開鍵暗号方式]]で共通鍵の受け渡しを行う
+暗号化通信の開始
--[[共通鍵暗号方式]]で暗号化した通信を行う

*SSL通信の仕組み [#xb829376]
**SSL/TLS の構造 [#e6a0b2ec]
-[[TCP/IP]]階層のアプリケーション層とトランスポート層([[TCP]])の間で暗号化等が行わる。
-SSL/TLS自体のプロトコルの構造
--上位層
---Handshakeプロトコル
---Change Cipher Specプロトコル
---Alertプロトコル
---Application Dataプロトコル

--下位層
---Recordプロトコル

**TLSレコード [#x947bee7]
***データ送信時 [#p9802516]
-メッセージをフラグメント単位に分割して以下の処理を行いTLSレコードを作成する
--圧縮
--HMACの生成
--暗号化

***データ受信時 [#daf12cf0]
--復号
--HMACの検証
--伸張

**TLSレコードの構造 [#tbb667f0]
-タイプ
-バージョン
-データ長
-通信データ
-HMAC
-パディング
-パディング長

**TLSハンドシェイク [#d9e7fbed]
+【クライアント】 => サーバ
++Client Hello
---利用可能な[[暗号化]]・圧縮アルゴリズムを送信して通信の開始をサーバに通知する
+クライアント <= 【サーバ】
++Server Hello
---クライアントから受領した[[暗号化]]・圧縮アルゴリズムから使用するものを決めてクライアントに通知する
++Certificate
---[[サーバ証明書]](サーバの[[デジタル証明書]])とルートCAまでの証明書のリストをクライアントに送信する
++Server Key Exchange
---(Certificateで[[サーバ証明書]]を送信しない場合)一時的なRSA鍵かDH鍵を生成してクライアントに送信する
++Certificate Request
---([[クライアント認証]]を行う場合)クライアントに対して[[クライアント証明書]](クライアントの[[デジタル証明書]])の提示を要求する
++Server Hello Done
---Server Helloから始まったクライアントに対する一連のメッセージの完了をクライアントに通知する
+【クライアント】 => サーバ
++Certificate
---([[クライアント認証]]を行う場合)[[クライアント証明書]]とルートCAまでの証明書のリストをサーバに送信する
++Client Key Exchange
---[[暗号化]]通信に使う&color(black,yellow){プリマスターシークレット};を生成する
---Certificateでサーバから受領した[[サーバ証明書]]に含まれる公開鍵で&color(black,yellow){プリマスターシークレット};を暗号化してサーバに送信する
++Certificate Verify
---([[クライアント認証]]を行う場合)Client Helloから始まる通信内容のダイジェスト(ハッシュ値)を生成する
---ダイジェストに秘密鍵で[[デジタル署名]]を作成してサーバに送信する
---サーバは、Certificateでクライアントから受領した[[クライアント証明書]]に含まれる公開鍵で、クライアントから受領した[[デジタル署名]]を検証する
++Change Cipher Spec
---Client Key Exchangeで生成した&color(black,yellow){プリマスターシークレット};と、サーバとクライアントが生成した[[乱数]]から&color(white,blue){マスターシークレット};を生成する
---Recordプロトコルは、Handshakeプロトコルから&color(white,blue){マスターシークレット};を受け取り、&color(white,blue){マスターシークレット};を元にMAC鍵、暗号鍵、[[ブロック暗号]]のCBCモードで使う初期ベクトル(IV)を生成する
---Change Cipher Specプロトコルは、使用する暗号アルゴリズムの準備が整ったことをサーバに通知する
++Finished
---鍵交換と認証処理が成功したことをサーバに通知する
---Change Cipher Specで生成した鍵を使い、メッセージを[[暗号化]]してサーバに送信する
+クライアント <= 【サーバ】
++Change Cipher Spec
---Client Key Exchangeでクライアントから受領した&color(black,yellow){プリマスターシークレット};を秘密鍵で復号する
---復号した&color(black,yellow){プリマスターシークレット};と、サーバとクライアントが生成した[[乱数]]から&color(white,blue){マスターシークレット};を生成する
---Recordプロトコルは、Handshakeプロトコルから&color(white,blue){マスターシークレット};を受け取り、&color(white,blue){マスターシークレット};を元にMAC鍵、暗号鍵、[[ブロック暗号]]のCBCモードで使う初期ベクトル(IV)を生成する
---Change Cipher Specプロトコルは、使用する暗号アルゴリズムの準備が整ったことをクライアントに通知する
++Finished
---鍵交換と認証処理が成功したことをクライアントに通知する
---Change Cipher Specで生成した鍵を使い、メッセージを[[暗号化]]してクライアントに送信する
---SSL/TLSのセッションとコネクションが確立した。以降、アプリケーションによる暗号化通信が行われる

**暗号スイートの選択 [#oe0f80ab]
-[[暗号スイート]](Cipher Suite)
|鍵交換に使うアルゴリズム | [[RSA]], [[DHE]]            | |
|証明書の署名アルゴリズム | [[RSA]], [[DSA]](DSS)         | [[デジタル署名]] |
|共通鍵暗号のアルゴリズム | [[RC4]], [[3DES]], [[AES]]  | [[共通鍵暗号方式]] |
|改竄チェック用の[[メッセージ認証コード]](MAC)の種類 | [[MD5]], [[SHA]] |[[ハッシュ]] |

**セッションとコネクション [#yb38eb58]
***セッション [#ydd8238b]
-マスターシークレットが共有される単位で作成される

***コネクション [#ib62b47a]
--セッションに従属して作成される(1つのセッションに複数のコネクションが作成される)
--同一セッションのコネクションは、マスターシークレットを共有するが、MAC鍵、暗号化鍵、初期ベクトル(IV)は別々の乱数を使ってコネクションごとに作成される
--コネクションは[[TCP/IP]]階層のトランスポート層にあたる
--クライアント側はコネクションごとに異なる[[ポート番号]]が割り当てられる

**SSL通信の高速化 [#f6389259]
-SSL Session Cache

*SSL/TLSの拡張仕様 [#fc59d2f8]
-[[SNI]] -Server Name Indication

*常時SSL [#za3c3906]
-[[AOSSL]](Always on SSL)
-[[HSTS]]

*セキュリティ上の攻撃 [#m301b90e]
-[[バージョンロールバック攻撃]]
--古いバージョンのSSL/TLSを意図的に使わせることで、脆弱性をついて暗号化通信の解読等を試みる攻撃
--[[OpenSSL]]のVer.0.9.8以前のバージョンには、SSL2.0を受け入れる脆弱性がある

-[[ダウングレード攻撃]]
--暗号通信を確立する際に、[[中間者攻撃]]によって弱い暗号スイートの使用を強制することで、解読が容易な暗号化通信を行わせる攻撃

**SSL/TLSに関係する脆弱性 [#a8914c51]
***FREAK [#u3f788d5]
-2015年3月に公開された脆弱性
-Webブラウザ等が輸出グレードが弱い暗号強度の[[RSA]]をサポートしていることに起因した脆弱性
-[[ダウングレード攻撃]]により、暗号化通信の解読等を試みる攻撃に悪用された

***[[HeartBleed]] [#l7f38142]
-[[OpenSSL]]の脆弱性

***BEAST攻撃 [#wa70abf1]
-SSL3.0、TLS1.0 の脆弱性
-CBCモードの初期化ベクトルの使い方が悪用され、Cookieの情報が窃取される脆弱性

***POODLE [#i139e5b0]
-SSL3.0, TLS1.0, 1.1 の脆弱性
-[[中間者攻撃]]により暗号化通信が解読される[[脆弱性]]

*ツール [#re032a96]
-sslscan ※SSLの状態を分析する
-sslscan ※SSLの強度を調査する
 sslscan <https://url>

*ガイドライン [#k1dcff35]
-「SSL/TLS暗号設定ガイドライン」([[IPA]])-https://www.ipa.go.jp/security/vuln/ssl_crypt_config.html

-TLS暗号設定ガイドライン~安全なウェブサイトのために(暗号設定対策編) -[[IPA]]~
https://www.ipa.go.jp/security/vuln/ssl_crypt_config.html

*関連サイト [#b94bc932]
-Bad SSL~
https://badssl.com/

-SSL Server Test -[[Qualys]]~
http://www.ssllabs.com/ssltest.index.html

-Crt.sh~
https://crt.sh/ 

-SSL Server Test - [[Qualys]]~
https://www.ssllabs.com/ssltest/

-SSL Pulse - [[Qualys]]~
https://www.ssllabs.com/ssl-pulse/

*関連用語 [#od75de33]
-[[ATS]]
-[[CSR]] - Certificate Signing Request
-[[DANE]] - DNS-Based Authentication of Named Entities
-[[Domain Fronting]]
-[[DTLS]] - Datagram Transport Layer Security
-[[OCSP]]
-[[PRF]] -Pseudo-Random Function
-[[SSL]]
-[[SSL-VPN]]
-[[SSLアクセラレータ]]
-[[STARTTLS]]
-[[TLS]]