appengine独自ドメインでSSL
GAE/JでSSLがサポートされました。
SSL for a Custom Domain – Google App Engine — Google Developers
for businessの発表から2年、Trusted Tester Programから半年以上経ってますが、待望のSSLサポートです。
SNIかVIPを選ぶ
いつのまにか管理コンソールのDashboardにも、「SSL VIPs」と「SSL SNI Certificates」が追加されています。
VIPで3.3ドル/日なんで、1ドル80円として8000円/月位、年間10万円弱です。
まぁIP半固定でSSL証明書って考えるとまぁソレくらいでしょうね。Herokuとかも同じくらいですし。
漢ならココはやはりSNI SSL、ミニマムでわずか0.06*5ドル/日、900円/月です。
SNIって何?という方はコチラ。
SNIは古いブラウザでは対応していませんが、WebKitなブラウザなら概ね問題ない筈です。
問題はInternet Explorer で、Vista以上ならInternet Explore 7以上でOKらしいですけど、Windows XP は非対応です。
コレは痛い。因みに私のThinkPad X301もXPです。仕事以外でIE使いませんけど。
スマホならOKかというとそうでもなく、iPhone4(iOS5)のSafariはOKでしたけど、AndroidはHoneycomb以降で無いとダメです。
少なくとも手元のHTC EVO (2.3 Gingerbread)ではダメでした。
うーん、ハニカム以前はダメって事は、現時点ではAndroidの大半がダメって事じゃないすか。コレも痛い。
早速SSLを使ってみます。
設定は主に Google Apps で行います。
Google Apps は appengineを独自ドメインで使う場合に使っている筈です。
対象となるアプリケーションはBillingが有効になってないといけません。
カスタムドメインでSSLをアクティベート
1)Google Apps に管理者としてログインして、「Domain Settings」タブ – 「SSL」タブをクリックします。
2)フォームにappengine の appid を入力し、「Enable」をクリックします。
(この時点でappengine の管理画面の「Billing Settings」の中に、SSL for custom domains が出現しています。
そこの「Setting」ボタンから、Google AppsのSSLの画面にいつでも移動できます)
このままではまだSSL使えません。SNIスロットを増やすかVIPを足すかしないといけません。SNIスロットを足します。
3)Google Apps の Domain Settings のSSL で、「Increase SNI certificate slots by 5 ($9.00 a month)」をクリックします。
(この時点でappengine の管理画面の「Billing Settings」の中のSNI Certificates が 5になっている筈です)
証明書の登録
一応ヘルプありますけど英語だし大した事買いてないです。
1)「Configure SSL Certificates」をクリックします。
2)「Upload a new certificate」をクリックします。
3)SSL証明書と秘密キーを「Upload」して、Serving Mode を「SNI Only」にセットし、「Assigned URLs」をセットして「Save Changers」をクリックします。
「Both the private key and SSL certificate should be in unencrypted PEM format」
と表示される場合は、秘密Keyのパスフレーズ解除を忘れていないか要確認です
これで独自ドメインでSSLが使える様になっている筈です。
つまづいた点
上記手順をやってみたんですが、Chromeで見ると「SSL 接続エラー サーバーとの安全な接続を確立できません。サーバー側に問題があるか、サーバーが必要とするクライアント認証証明書を所持していない可能性があります。 エラー 107 (net::ERR_SSL_PROTOCOL_ERROR): SSL プロトコル エラーです。」なんて言われて見られません。
CrossTrustの証明書使っているんですけど、サーバ側に中間CAの証明書を配備してないからだと思います。
Google AppsのDomain Setting のSSLタブには証明書と秘密鍵の2つしかフォームが無いし・・・
仕方ないんで、証明書のテキストファイルに中間CAのとWEBサーバの2つを合体したテキストを作成して、秘密鍵と共にアップロードしてみました。
しばらく状況変わらず焦りましたが、ブラウザを再起動すると普通に見られる様になりました。
とりあえず暗号化通信だけでいいんで、もっと安い証明書を探さないと。