【写経】CloudFlareのドキュメントを擦る〜SSLと証明書篇

## 1.はじめに
タイトルそのまま。
CloudFlareのドキュメントわかりやすいよなーと以前から思ってたので、読みつつメモする記事です。
目新しいことは全くありませんのでご了承ください！


## 2.公式ドキュメントをご紹介
とはいえたまたまこの記事に辿り着いてしまった方もいると思うので。
業務で証明書を雰囲気で発行したことある方が読むとスルスル入ってきます(わい)。

https://www.cloudflare.com/ja-jp/learning/ssl/what-is-ssl/


## 3.SSLとは？
SSL(Secure Socket Layer)は、暗号化ベースのインターネットセキュリティプロトコル。
インターネット通信でプライバシー、認証、データの整合性を確保する目的で開発された。
TLSの前身。
1995年に開発され、1999年にSSLはTLSに更新された。

SSLやTLSを実装しているWebサイトでは「HTTP」ではなく「HTTPS」と表示される。

- Insecure：安全でない
- Encrypted：暗号化

![スクリーンショット 2022-05-07 17.59.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/c02870cd-21cb-3ce8-e0dd-116c58dfbc57.png)

HTTPS Webアドレスを持つwebサイトは全てSSL/TLSを使用する。

### SSL/TLSの仕組みは？
- 高度なプライバシーを確保するために、SSLはWebを介して送信されるデータを暗号化する。
そうしたデータの傍受を試みた場合、傍受者にはほぼ解読不能な文字化けした文字列にしか見えない。

- SSLは通信している2つのデバイスの間でハンドシェイクと呼ばれる認証プロセスを開始して、
両方のデバイスが真に意図したデバイスであるかの検証を行う。

- SSLはデータにデジタル署名して、データの整合性を提供する。
これによって、データが意図した受信者に到達する前に改ざんされていないことを確認する。

### SSL/TLSが重要な理由
もともとWeb上のデータは平文で送信されていたらしい。
なのでメッセージを傍受すれば誰もが読み取れる。クレカの番号とか思いっきり隠されてなかった。

SSLはこの問題を解決し、ユーザーのプライバシーを守るために作られた。
ユーザーとWebサーバー間のデータを暗号化することにより、データの傍受者がほぼ解読不能な文字列しか見ることができなようにした。

また、SSLは特定のサイバー攻撃を停止する。
SSLはWebサーバーを認証し、送信中のデータの改ざんも防止する。

### SSL証明書とは？
SSLは、SSL証明書を持っているWebサイトでのみ実装可能。
SSL証明書は何者かを証明するIDカードやバッジみたいなもの。
SSL証明書はWebサイトまたはアプリケーションサーバーによってWebに保存・表示される。

SSL証明書の最も重要な情報の１つは、Webサイトのパブリックキー。パブリックキーで暗号化が可能になる。
ユーザーのデバイスはパブリックキーを確認し、それを使用してWebサーバーとの安全な暗号化キーを確立する。
また、Webサーバーには秘密になっているプライベートキーもある。
プライベートキーは、パブリックキーで暗号化されたデータを複合化する。

SSL証明書の発行は、認証局(CA)が担当する。


### SSL証明書の種類
SSL証明書にはいくつかの種類がある。
1つの証明書は種類に応じて1つのWebサイトまたは複数のWebサイトに適用できる。

- 単一ドメイン
単一ドメインSSL証明書は、1つのドメインにのみ適用される。
ドメインはwww.sosatみたいなWebサイトの名前。

- ワイルドカード
単一ドメイン証明書と同様に、ワイルドカード証明書は1つのドメインにのみ適用される。
ただし、そのサブドメインも含まれる。
①　www.sosat
②　www.sosat.aaa
みたいな範囲をカバーできる。単一ドメインだとwww.sosatしかカバーできない。

- マルチドメイン
マルチドメイン証明書は、その名の通り複数の無関係なドメインに適用できる。

### SSL証明書の検証レベル
SSL証明書にはさまざまな検証レベルがある。
検証レベルはバックグラウンドチェックのようなもので、チェックの徹底度によってレベルが変わる。

- ドメイン認証
最も厳格度が低いレベルで、値段も安い。
企業がすべきことはドメインを制御していることを証明するだけ。

- 組織認証(企業実在認証)
より実践的なプロセス。
CAは証明書を要求している個人・企業に直接連絡する。
(証明書を発行したら会社に電話がかかってくるアレ)

ユーザーにとってより信頼できるレベル。

- EV認証（拡張認証）
SSL証明書を発行する前に、組織の完全なバックグラウンドチェックが必要。


## 4.SSL証明書とは？

![スクリーンショット 2022-05-21 21.33.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/237ca272-64d2-cb56-95c0-9f1bc3d3bc5f.png)


SSL証明書はWebサイトの配信元サーバーにホストされるデータファイル。
SSL証明書はSSL/TLS暗号化を可能にし、Webサイトの公開鍵とWebサイトのID、その他関連情報が含まれている。
配信元サーバーと通信しようとするデバイスは、このファイルを参照して公開鍵を取得し、サーバーの身元を確認する。
プライベートキーは秘密にして安全を保つ。

### SSL証明書に含まれている情報とは？

多い！w
公開鍵で暗号化されたデータはプライベートキーでのみ解読できる。
その逆も可能。これ知らなかった

### WebサイトにSSL証明書が必要な理由とは？

Webサイトはユーザーデータを安全に保ち、Webサイトの所有者を確認し、攻撃者がWebサイトの偽のバージョンを作ることを防止し、ユーザーの信頼を得るためにSSL証明書が必要である。

- 暗号化
SSL証明書が発行する公開鍵とプライベートキーで可能。
Webブラウザなどのクライアントは、サーバーのSSL証明書からTLS接続をOpenするために必要な公開鍵を取得する。

- 認証
SSL証明書は、クライアントが実際にドメインを所有している正しいサーバーと通信していることを証明する。
これにより、ドメインのなりすましなどの攻撃を防止することができる。

- HTTPS
HTTPSはこれまでにあげたセキュアなこと以外に、ユーザーの観点からも安全性を高める。
多くのユーザーはHTTPとHTTPSの違いに気がつかない。
ただしほとんどのブラウザは`安全でない`とかでタグ付けしてよりわかりやすくしている。良い。

![スクリーンショット 2022-05-21 21.46.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/fbd95d77-08aa-0254-523e-dfddbcf9c473.png)

### WebサイトはどのようにSSL証明書を取得するのか

証明書認証局(CA:Certificate Authorities)からドメインを取得する。
CAはSSL証明書を生成・提供する外部組織であり、信頼できる第３者である。
CAは独自のプライベートキーで証明書にデジタル署名し、クライアントデバイスが証明書を検証できるようにする。

証明書が発行されたら、Webサイトの配信元サーバーにインストールして有効化する必要がある。
配信元サーバーで有効化されると、WebサイトはHTTPSを介して読み込み、Webサイトとのトラフィックは暗号化されて安全になる。


### 自己署名SSL証明書とは

技術的には必要な情報を含めた公開鍵とプライベートキーのペアを生成すれば、誰でも独自のSSL証明書を作成することが可能。
このような証明書は使用されるデジタル署名がCAからではなくWebサイト自体のプライベートキーになるため、自己署名証明書と呼ばれる。

ただし、自己署名証明書では配信元サーバーが本人であることを検証する外部期間が無い。
なのでブラウザが自己署名証明書を信頼できるとみなさない可能性がある。
仮に`https://`でもセキュアでないと判定したり、Webサイトの読み込みをブロックする場合もある。

ちなみにCloudFlareでは無料のSSL/TLS暗号化を提供しているとのこと。
なので無料でSSL証明書が発行できるのだと思う。
かつそれを行った最初の企業らしい。
更にCloudFlareのミッションはインターネットの安全性を高めること。しゅごい。


## 5.おわりに

あっさり終わると思ったら後半のボリュームすごかったw
けど知りたかったところは概ねカバーできたのでおk！

また深堀りしたくなった時に読もうと思います。
CloudFlareありがとな！

以上です。