「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-戻る
--[[証明書]]
--[[HTTP]]

* 目次 [#sc901e4b]
#contents

*概要 [#y98bec82]
-デジタル証明書を使用してエンドポイントを証明し通信の暗号化を行う。

-エンドポイントには、クライアント、サーバなどがあり、~
対応する証明書にクライアント証明書、サーバ証明書がある。

-しかし、ICカードなどに格納して、~
特定のマシンに限定しない使用方法もある。

**経緯 [#k2a94003]
歴史的経緯について。

***SSL [#t9bc1c67]
-Netscape Communications社が開発した。
-標準化はされていない。
-歴史的文書と言う形で後日、RFCが公開された。

***TLS [#rc898e35]
-SSL3.0を標準化したもの。
-SSLを継承するものと言う位置付け。

***脆弱性 [#n571cb3a]
-SSLの全バージョンと
-TLSの1.0と1.1の実装の一部には

脆弱性が発見され、TLS1.2以上への移行が促されている。

**X over SSL/TLS [#bbb963f8]
SSL/TLSはアプリケーション層とトランスポート層のプロトコルなので、~
アプリケーション層プロトコルへ多数、適用がされている。

***HTTPS [#z7cbb3a5]
-HTTPS over SSL/TLS
-SSL/TLSの最も多いユースケース
-HTTPの下位スタックにSSL/TLSを使用する。

***その他 [#n3507b13]
-SMTPS(SMTP)
-LDAPS(LDAP)
-FTPS(FTP)
-IMAPS(IMAP)
-POP3S(POP3)

**機能 [#j664bae9]

***証明 [#ob730ee4]
サーバー証明書やクライアント証明書を用い、~
サーバー認証やクライアント認証を行う。

***暗号化 [#k24b9bf2]
上記の証明書を使用して鍵の生成と交換を行い暗号化通信を行う。

***メッセージ認証 [#dbd3108e]
MACによるメッセージ認証を行う。

*詳細 [#m6323280]

**プロトコル構造 [#k48422f6]

***スタック [#mb5dfb91]
|>|>|>|BGCOLOR(gray):アプリケーション層|
|Hand Shakeプロトコル|Change Cipher Specプロトコル|Alertプロトコル|Application Dataプロトコル|
|>|>|>|Recordプロトコル|
|>|>|>|BGCOLOR(gray):トランスポート層|
|>|>|>|BGCOLOR(gray):...|

***プロトコル [#u2305358]

-Hand Shakeプロトコル
--ネゴシエーション
--セッション確立のハンド・シェイク

-Change Cipher Specプロトコル
--暗号化に関するパラメタの決定
--若しくは、パラメタの変更通知

-Alertプロトコル~
通信中に発生したエラーを相手に通知する。
--Warning
--Fatal(即中断)

-Application Dataプロトコル~
ネゴシエーションのパラメタに従い、透過的に送受信

--Recordプロトコル
-Recordプロトコル
--ブロック暗号化されたペイロード部分
--2^14バイト以下のブロックに分割される。
--圧縮、MACの生成、暗号化が行われる。

**シーケンス [#fd8fddbe]

***コネクション確立 [#ece043ee]
-プロトコル
--Hand Shakeプロトコル
--Change Cipher Specプロトコル
--Alertプロトコル
--Application Dataプロトコル

-コネクション確立手順~
網掛けは、オプショナル。

||クライアント|方向|サーバ|説明|
|1||←|BGCOLOR(gray):HelloRequest|ClientHelloをリクエスト|
|2|ClientHello|→||ClientHelloをレスポンス|
|3||←|ServerHello|ClientHelloに対するServerHello|
|4||←|ServerCertificate|サーバ証明書を送信|
|5||←|ServerKeyExchange|鍵交換メッセージその1|
|6||←|BGCOLOR(gray):CertificateRequest|クライアント証明書を要求|
|7||←|ServerHelloDone|サーバからの送信終了を示すエンドマーク|
|8|BGCOLOR(gray):ClientCertificate|→||クライアント証明書を送信|
|9|ClientKeyExchange|→||鍵交換メッセージその2|
|10|CertificateVerify|→||クライアントが正しい秘密鍵を持っていることを証明するための署名|
|11|ChangeCipherSpec|→||無暗号通信の終了を示すエンドマーク|
|12|Finished|→||ClientHello からのメッセージを暗号化して送信|
|13||←|ChangeCipherSpec|無暗号通信の終了を示すエンドマーク|
|14||←|Finished|ServerHelloからのメッセージを暗号化して送信|
|15|ApplicationData|⇔|ApplicationData|暗号通信|
|#|クライアント|方向|サーバ|説明|h
|1||←|BGCOLOR(gray):Hello Request|Client Helloをリクエスト|
|2|Client Hello|→||Client Helloをレスポンス(暗号化/圧縮アルゴリズムの一覧)|
|3||←|Server Hello|Client Helloに対するServer Hello(暗号化/圧縮アルゴリズムの選択)|
|4||←|Server Certificate|サーバ証明書を送信(証明書チェーンを含む)|
|5||←|Server Key Exchange|鍵交換メッセージその1(RSAかDHで)|
|6||←|BGCOLOR(gray):Certificate Request|クライアント証明書を要求|
|7||←|Server Hello Done|サーバからの送信終了を示すエンドマーク|
|8|BGCOLOR(gray):Client Certificate|→||クライアント証明書を送信|
|9|Client Key Exchange|→||鍵交換メッセージその2(その1の続き)|
|10|Certificate Verify|→||クライアントが正しい秘密鍵を持っていることを&br;証明するための署名を送付(サーバの公開鍵で検証)|
|11|Change Cipher Spec|→||無暗号通信の終了を示すエンドマーク&br;(共通鍵から暗号化/復号化に使用するパラメタを生成)|
|12|Finished|→||Client Hello からのメッセージを暗号化して送信|
|13||←|Change Cipher Spec|無暗号通信の終了を示すエンドマーク&br;(共通鍵から暗号化/復号化に使用するパラメタを生成)|
|14||←|Finished|Server Helloからのメッセージを暗号化して送信|
|15|Application Data|⇔|Application Data|暗号通信|

***データ送受信 [#d62183c4]
-プロトコル
--Recordプロトコル

-データ送受信手順

--暗号化
---データを2^14バイト以下のブロックに分割
---分割されたブロックを圧縮
---HMAC(MACシークレット)によるMACの生成
---連結とパディング
---暗号化(暗号化キー+初期ベクタ(IV))が行われる。
---暗号化されたデータを送信する。

--復号化
---復号化
---MAC認証
---圧縮の解凍
---ブロックの連結

**用語解説 [#c788117c]

***セッションとコネクション [#ac0c83fc]
-セッション
--共通鍵生成までのネゴシエーションのこと(仮想的概念)。
--特に負荷が高いのは鍵交換処理(プリマスタシークレットの生成まで)

-コネクション
--実際のTCP/IPコネクションで、セッションは共有する。
--ただし、コネクション毎、別々に暗号化/復号化パラメタを生成する。

***プリマスタシークレットとマスタシークレット [#p4042da5]

-プリマスタシークレット
--キー交換アルゴリズムで使用する値。

-マスタシークレット

--=共通鍵

--以下にPRF演算を施したもの。
---プリマスタシークレット
---サーバランダム
---クライアントランダム

--さらにPRFを行って暗号化/復号化に使用するパラメタを生成~
(生成したキー・ブロックから順次切り出す)~
(それぞれ、クライアント用とサーバ用がある)~
---MACシークレット
---暗号化キー
---初期ベクタ(IV)

-ランダム~
Helloに含まれる
--クライアントランダム(Client Hello)
--サーバランダム(Server Hello)

-参考
--SSL/TLS(Part.3) (3/4):不正アクセスを防止するSSL/TLS(4) - @IT~
https://www.atmarkit.co.jp/ait/articles/0101/16/news002_3.html

**脆弱性 [#l7e8ea42]

***バージョンロールバック攻撃 [#k904feee]

***Heartbleed [#q90928b9]

***POODLE [#ma37839d]

***FREAK [#k99a7e43]

***参考 [#k5a2f2eb]
-Transport Layer Security - Wikipedia > TLS/SSLの既知の脆弱性~
https://ja.wikipedia.org/wiki/Transport_Layer_Security#TLS/SSL%E3%81%AE%E6%97%A2%E7%9F%A5%E3%81%AE%E8%84%86%E5%BC%B1%E6%80%A7

*参考 [#nddd6085]
-Transport Layer Security - Wikipedia~
https://ja.wikipedia.org/wiki/Transport_Layer_Security

-SSL/TLSの解説と選び方まとめ|ジオトラスト~
https://www.geotrust.co.jp/ssl_guideline/ssl_beginners/

-SSLとTLSとは?意外に知らないSSLとTLSの違い(簡単編) ~
常時SSL Lab. by Zenlogicのファーストサーバ株式会社~
https://zenlogic.jp/aossl/basic/ssl-tls/

**Qiita [#s7b889fa]
-エンジニアなら知っておきたい、絵で見てわかるセキュア通信の基本~
https://qiita.com/t_nakayama0714/items/83ac0b12ced9e7083927

-SSL/TLSについてまとめ2018~
https://qiita.com/Brutus/items/1015cc01d2e1eb82a526
-暗号技術入門を読んでhttps通信の仕組みを学ぼう~
https://qiita.com/n_slender/items/85452a235fce862d9599

**[[OpenSSL]] [#dcc0b738]
**[[SSTP]] [#xc50b87d]
**[[VPN]] [#va768b66]

----
Tags: [[:IT国際標準]], [[:セキュリティ]], [[:暗号化]], [[:インフラストラクチャ]], [[:通信技術]], [[:Windows]], [[:IIS]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS