httpsとかSSL/TLSとか
~ メモ ~
sがsecureのsだから、なんか安全なんでしょ?ぐらいにしか把握してなかったので(ひどすぎる)色々調べてまとめてみた。
そもそもセキュリティもとい、セキュアな通信を実現することは
・機密性(Confidentiality)
・可用性(Integrity)
・完全性(Availability)
の3つを満たすこと。
SSL/TLS
Transport Layer Security(トランスポート・レイヤー・セキュリティ、TLS)は、インターネットなどのコンピュータネットワークにおいてセキュリティを要求される通信を行うためのプロトコルである。主な機能として、通信相手の認証、通信内容の暗号化、改竄の検出を提供する
wikipedia参照。
・セキュアの通信を行うためのプロトコル。
・多くの場合、トランスポート層(TCP)とアプリケーション層(HTTP)間で使われる。
・httpなどのアプリケーション層プロトコルと組み合わせることで(https)セキュアな通信を実現する。
・HTTP以外にも適用できる。(httpの利用を想定した設計にはなっているらしい)
・sslとtlsは実際には別物らしいが、まぁtlsが新しいぐらいに思っておけばおk。
HTTPS
HTTPS (Hypertext Transfer Protocol Secure) は、HTTPによる通信をより安全に(セキュアに)行うためのプロトコルおよびURIスキームである。厳密に言えば、HTTPS自体はプロトコルではなく、SSL/TLSプロトコルによって提供されるセキュアな接続の上でHTTP通信を行うことをHTTPSと呼んでいる。
wikipediaに全て載っていた。
https://milestone-of-se.nesuke.com/nw-basic/tls/https-structure/
この記事にわかりやすいシーケンスがある。
これらをふまえて
http通信にssl/tlsを適用してセキュアな通信を行う(https)ということがわかったが、実際になにをしているかというと、先ほど書いたように、
・通信相手の認証
・通信内容の暗号化
・改竄の検出
を行う。
通信相手の認証
訪れようとしているwebサイトが本物であることを保証すること。
それを実現するのが証明書(ssl証明書とかsslサーバ証明書とか言ったりする)
第三者の保証と考えていい。
アップルの公式ストアを例にすると
というサイトが本当にアップル社が提供しているのかどうかを
DigiCert High Assurance EV Root CA
という証明書(第三者)で保証している。
よくきくオレオレ証明書はこの第三者が提供する証明書を自分で作って自分に発行することを言う。
通信の暗号化
通信内容を盗聴されないように暗号化する。
- 認証局から証明書と秘密鍵を取得しサーバーに設置
- クライアントからサーバーに接続要求がくる
- サーバーが証明書と公開鍵をクライアントに送る
- クライアントは認証局で証明書の検証
- クライアントは共通鍵を作り公開鍵でそれを暗号化してサーバに送る
- サーバは秘密鍵を使って暗号化された共通鍵を複合(どちらも共通鍵を所持)
- お互い共通鍵を使用して暗号化通信を行う
ざっくりとこんな感じ(ざっくりしすぎ)
https://qiita.com/kuni-nakaji/items/5118b23bf2ea44fed96e
この人の記事がめちゃくちゃわかりやすかった。
改竄の検出
データを書き換えられたら困るので、データの完全性を担保するためにメッセージのダイジェスト(フィンガープリントと言ったりもするらしい)と呼ばれる値を計算して通信に添付する。
受信側はダイジェスト再計算してあっているかどうかを確認。
これでデータの完全性が担保できる
この人の記事もめちゃくちゃわかりやすかった。
というか、こッチの方が断然良い。
https://qiita.com/t_nakayama0714/items/83ac0b12ced9e7083927
おわり