FaceBookアプリは2011年10月までにSSL対応とOAuth2.0認証必須...

mixiアプリをまんま移植しようと思って調べていたところ、

色々と障壁。。

http://blog.falcon-space.net/2011/04/fb-secure-browsing-hard-on-custom-tab/

Facebookにアクセスするときは常時SSL通信(httpsプロトコル)になるように設定しましょう
という旨の通知が出るようになったらしい。

facebookアプリもmixiアプリも、外部サーバー上のコンテンツをiframeを通して
読み込む仕組みであるため、インターネットを経由する通信の安全性はfacebook側が
責任を負いにくい仕様とのこと。

現状はアプリページに遷移する際に、
「セキュアな接続を解除しますか?」という表示が出力され続行ボタンを押下しないと
先には進めない仕様。

SSLって暗号化してデータを送信してるのは分るが、これって
公開鍵暗号化と同じ仕組み??
結論としては公開鍵暗号共通鍵暗号のハイブリッド。
↓を書きながら少しずつ思い出す・・。

公開鍵暗号化方式のおさらい

1.鍵を2種類に分割

>秘密鍵 ---> 公開鍵 作れる
>公開鍵 ---> 秘密鍵 作れない

2.片方で閉めたものは片方でのみ開けれる
公開鍵で閉める ---> 秘密鍵で開ける
秘密鍵で締める ---> 公開鍵で開ける

3.AさんからB,C,Dさんへメッセージを送る場合

A  -------> B
   -------> C
  -------> D
[秘密鍵]    [公開鍵]

①AはB,C,Dに秘密鍵から作られた
公開鍵をばら撒く。
②Bは配られた公開鍵を使って暗号化して
Aに送る。
③Aは秘密鍵を使用して復号化する

SSH接続時の公開鍵認証の場合

接続するPC ---------> サーバー
[秘密鍵]        [公開鍵]

①上記のように鍵を設置する
②サーバーがクライアントに向けて公開鍵で暗号化したメッセージを送信
③PCは秘密鍵で解読。サーバーに送り返し、暗号化前と一致すればログイン!

SSLの場合

SSL共通鍵暗号化方式+公開鍵暗号化方式を組み合わせた
ハイブリッド形式
公開鍵暗号のみだと暗号化・復号化に時間がかかる為

クライアント   ---------  サーバー
[公開鍵]		  [秘密鍵]

[共通鍵生成] --------------> 公開鍵で暗号化して送る
               >秘密鍵で復号化
[データ](共通鍵で暗号化)-------------->共通鍵で復号化

①クライアントはサーバーに接続要求
②webサーバーが公開鍵をクライアントへ送る
③クライアントがデータ本体を暗号化
④クライアントは共通鍵生成、それをwebサーバーの公開鍵で暗号化
⑤↑の3,4をサーバーに送る
⑥サーバーは共通鍵をサーバーの秘密鍵で復号化
⑦webサーバーは取り出した共通鍵でデータを復号化

鍵ペアの作成方法

★証明書

1.データの送り主が鍵の持ち主か?
公開鍵は正しいペアの秘密鍵でのみ開く為、
データが復号化できたことで正しいペアの鍵で暗号化されたことを証明できます

2.データが途中で改ざんされていないか?
データ改ざんを確認するためには「ハッシュ関数」を使用。
SHA-1MD5などを使用したハッシュ値
.元値が1ビットでも違うと異なる値になる
.生成されたハッシュ値から元には戻れない
.生成されるハッシュの長さは一定

3.OpenSSLなどを使用すれば誰でも鍵ペアの生成が可能。
正しい鍵ペアでも送り主が「本物」かは分らない
そこで「デジタル証明書」!!
|
|->身元保証つき公開鍵

通常の鍵ペアと異なる点は、公開鍵に認証局のデジタル署名が施されている!

SSL導入の手順

http://dounokouno.com/2011/04/07/%E3%81%95%E3%81%8F%E3%82%89%E3%81%AEvps%EF%BC%88centos-5-5%EF%

BC%89%E3%81%AB-rapidssl-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%

99%E3%82%8B%E3%81%BE%E3%81%A7%E3%81%AE/

http://akibe.com/2010/10/centos-setup-20-ssl/

http://blog.maesan.jp/1263464.html

Apacheをインストール
②OpenSSLインストール確認
yum list openssl
③mod_sslをインストールする
yum -y install mod_ssl
④鍵ペアの作成とデジタル証明書の作成
sudo openssl genrsa -out server.key 2048
Apache設定ファイルとSSL設定ファイルの設定

★申請手順

1.CSRの作成
2.SSL証明書発行の申込み
3.サーバーのSSL設定
#openssl genrsa -des3 -out server.key 2048

CakePHPSSLの取り扱い

SSLコンポーネント、又はSecurityコンポーネントを使用することで簡単にSSLを使用できます↓
http://bakery.cakephp.org/articles/lemon/2008/07/07/component-for-forcing-a-secure-connection

class TestController extends AppController{
	var $component = array('Ssl');

	function index(){
		$this->Ssl->force();
	}
}

SSLの取得

RapidSSL。KingSSLだと証明書の取得に年間2000円前後。

(参考)
http://dounokouno.com/2011/04/07/%E3%81%95%E3%81%8F%E3%82%89%E3%81%AEvps%EF%BC%88centos-5-5%EF%

BC%89%E3%81%AB-rapidssl-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%

99%E3%82%8B%E3%81%BE%E3%81%A7%E3%81%AE/

http://dounokouno.com/2010/09/29/%E3%81%95%E3%81%8F%E3%82%89%E3%81%AEvps%E3%81%A7sinatra%E3%82%

92%E5%8B%95%E3%81%8B%E3%81%99%E3%81%BE%E3%81%A7%E3%81%AE%E3%83%A1%E3%83%A2/