やる気がストロングZERO

やる気のストロングスタイル

https(ssl)通信設定の概要

サイトをhttpsにするには以下の手順を踏む必要がある。

参考)
ちゃんと理解するSSL/TLS 前編 - Qiita

事前準備(認証局に認証してもらって証明書をもらう)

hostの公開鍵とhostの情報を含めた「署名文書」を認証局に送る。

認証局は署名文書から実在性確認や信頼性チェックを行う。
問題なければ署名文書をハッシュ化して、その文字列を認証局秘密鍵で暗号化する。
暗号化したものを署名文書に付け加える(署名)。これが証明書となる
できた証明書をhostに返却する。

hostは受け取った証明書と秘密鍵をつかってhttps通信できるように設定を行う。

クライアントからhttpsリクエストがあったとき

hostは証明書(署名文書[hostの情報 + hostの公開鍵] + 認証局の署名)をクライアントに送る。
クライアントは証明書の「署名文書の部分」をハッシュ化する。(A)
クライアントは「認証局の署名の部分」を認証局の公開鍵で複合する。(B)
クライアントは(A)と(B)を比較し、同一であればこの証明書は認証局が認証したものである(=通信相手は意図通り)と確認できる。
(※クライアントのブラウザには最初から(信頼されている)認証局の公開鍵がインストールされている。)
クライアントはhostの公開鍵を使って共通鍵を暗号化し、hostへ送信する
以降は共通鍵を使って暗号化通信を行う。

opensslのコマンドで対応づけると

参考)
オレオレ証明書をopensslで作る(詳細版) - ろば電子が詰まつてゐる

hostの秘密鍵(server.key)を作成

$ openssl genrsa 2048 > server.key

署名文書の作成

openssl req -new -key server.key > server.csr

コマンドを実行すると対話形式で色々聞かれる(署名文書の内容につかわれる)
秘密鍵を指定しているけど、内部で公開鍵を取り出して署名文書に追加してくれている。

署名文書を受け取って署名する。(認証局が行う)

$ openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt

nginxにはserver.keyとserver.crtを設定する。
クライアントにはserver.crtが送信される。