初めまして、サイオステクノロジーに新卒で入社した有村です。知識不足で間違えたことをブログに書いてしまうかもしれませんが、優しく指摘して貰えると嬉しいです。
今回はShibbolethを理解するための前段階としてHTTP,HTTPS,SSLを勉強したのでアウトプットしていきたいと思います。
HTTPとは
HTTP(Hyper Text Transfer Protocol)とはWebページ内のデータ(文字や画像)をクライアント(アクセスする側のPC)とサーバー(アクセスされる側のPC)との間で通信するための約束事になります。Webブラウザのアドレスにhttps://~と書いてあるものはHTTPで通信しています。しかし、HTTPでの通信は第三者に内容を覗かれる可能性がありセキュリティ面での不安がありました。そこで、通信を暗号化する技術が開発されました。
HTTPSとは
HTTPS(Hyper Text Transfer Protocol over SSL)とは簡単に説明すると、前項で話した暗号化する技術をHTTPに加えたものです。その暗号化技術の名前がSSLです。なので、HTTPS = HTTP + SSLということになります。Webブラウザのアドレスにhttps://~と書いてあるものはHTTPSで通信しています。
SSLとは
SSL(Secure Sockets Layer)は送受信しているデータを暗号化する技術のことです。
現在はSSLではなく次世代規格のTLS(Transport Layer Security)でデータを暗号化しています。一般的にTLSも含めてSSLと呼ぶことが多いのでこの記事ではSSLと記載しています。
SSL暗号化通信によって以下の事ができるようになります
- 通信相手以外が通信内容を見ても、内容を判別できなくする。
- 通信内容が途中で改ざんされないようにする
改ざんされたらそれが分かるようにする - 通信内容は予め許可した人だけ可能にする
SSL暗号化通信には2つの暗号方式を使って安全な接続を確立しています。
共通鍵暗号方式
共通鍵暗号方式とは暗号化と複合に共通の鍵を用いる暗号方式です。
クライアントとサーバーの間のみで利用できる共通鍵を生成し、お互い暗号化、複合をしてデータを安全に送受信します。しかし、共通鍵を渡す段階では暗号化されていないので、どのようにして安全に渡すのかという問題があります。
公開鍵暗号方式
公開鍵暗号方式とは公開鍵と秘密鍵という2つの暗号鍵がペアになっており、どちらかで暗号化したものは、ペアの暗号鍵でないと復号できない仕組みです。万が一公開鍵を途中で盗まれたとしても、秘密鍵がなければデータを複合できないので安心です。しかし、手に入れた公開鍵が通信を望む相手のものなのか照明することが出来ません。
SSL暗号化通信
SSL暗号化通信は共通鍵暗号方式と公開鍵暗号方式を使って安全な接続を確立しています。安全な接続を確立するまでの流れは以下のようになります。
- クライアントからサーバーにHTTPリクエストを送る
- サーバーはクライアントに公開鍵とSSLサーバー証明書
(身元保証書のような物)を送る - クライアントでSSLサーバー証明書を確認して通信を望む相手かの確認を行う
- クライアント側で共通鍵を作成
- 送られてきた公開鍵で共通鍵を暗号化してサーバーに送る
- 秘密鍵で公開鍵を開け、共通鍵を取り出す
- クライアントとサーバー、どちらも共通鍵を持っているので暗号化してデータを送信できるようになる。
まとめ
今回はHTTP、HTTPS、SSLについて自分が学んだものをアウトプットしてみました。
皆さんもこの記事を読んで理解することが出来たと思って貰えれば嬉しいです。
次回はシングルサインオンで使う認証(特にSAML認証)について学んでいきたいと思います。