Share...
14 Jan 2013 18:14

CA Beat エンジニアのブログ

Google App Engineをメインに技術情報を発信しています。


テーマ:
$CA Beat エンジニアのブログ-App Engine セキュア


前編 App Engineの独自ドメイン設定方法(SSLなし・最新UI対応版)
後編 App Engineの独自ドメイン&SSL設定方法


CA Beat エンジニアリーダーのヤマサキです。

この記事は「前編 App Engineの独自ドメイン設定方法(SSLなし・最新UI対応版)」の続きです。

後編では「SSLなしの独自ドメインの設定が既にできている」という前提で、
SSL対応させるための手順について解説していきます。

まだ独自ドメインの設定ができていない方は、前編からどうぞ。

SSLを使うホスト名は前回と同じ「ssltest.cabeat-test.jp」です。



○秘密鍵・CSRの作成

apacheでSSL証明書を使う場合と同じ手順です。


・秘密鍵の作成
openssl genrsa -des3 -out ssltest.cabeat-test.jp.key 2048


・パスフレーズの指定
PassPhrase:*****


・CSRの作成
openssl req -new -key ssltest.cabeat-test.jp.key -out ssltest.cabeat-test.jp.csr


・CSR情報の入力
Country Name:JP
State or Province Name:Tokyo
Locality Name:Shibuya
Organization Name:CA Beat, Inc.
Organizational Unit Name:(入力無し)
Common Name:ssltest.cabeat-test.jp
Email Address:(入力無し)


・完成したCSR(例)
$CA Beat エンジニアのブログ-04.ssl_csr




・PrivateKeyを復号する(パスフレーズの解除)
openssl rsa -in ssltest.cabeat-test.jp.key -out ssltest.cabeat-test.jp.pem

apacheでSSL設定する際に、起動時にパスワードを聞かれないようにするために行われるのと同じ。
後でPrivate KeyをGoogle AppsにUploadするのですが、その時に「暗号化されていない状態」を要求されているので復号しておきます。

※関係無いですが、「復号化」という言葉は間違いで「復号」が正しいそうですね。



○SSL証明書の選定

SSL証明書を発行してくれる会社はいくつかあります。
今回筆者が検討した発行機関について個人的見解と公式情報を書いてみます。


・Verisign
https://www.verisign.co.jp/ssl/index.html

超有名な大御所。
ここの証明書が使えない端末なら他の証明書も使えないんじゃない?ってぐらい最強の証明書。(※私見です)
ただしお値段も大御所的価格。(※筆者の個人的な感想です)

基本は「サーバー1台につき1ライセンスが必要」という料金体形なので、
動的にサーバーインスタンスが増加するApp Engineには不向き、と思いきや、
実は「大々的に公開していないクラウドサービス向けの料金プラン」があって、
問い合わせすると教えてくれる。

App Engineに関しては「App Engineの総課金額に基づいて段階的に価格が上がる」という形態。
公開していないそうなので一応料金は伏せておきます。
Verisignが良い場合は問い合わせしてみると良いと思います。

※ちなみに、ここで言う「総課金額」は
「Datastoreの書き込み等の、Webに関係ない機能の料金も含めた総課金額」だそうです。


・Geotrust
https://www.geotrust.co.jp/products/ssl_certificates/quick_ssl_premium/

昔から格安で有名。現在はVerisignのグループ会社。
数年前はauの携帯が対応していなかったため、
「携帯サイト向けでは厳しい、でもPC向けなら十分」という印象だったが、
現在「クイックSSL プレミアム」は「スマートフォン対応率 100%」と謳っている。

・1ライセンス買えばサーバー台数の制限なし
・「クイックSSL プレミアム」が年額36,540円
・スマートフォン対応率 100%
・取得手続きは簡単で、その日のうちに証明書が手に入る


・GlobalSign
https://jp.globalsign.com/service/ssl/quickssl.html?navi=ssl

比較的最近に初めて使ったのであまり詳しくありません。。

・1ライセンス買えばサーバー台数の制限なし
・「クイック認証SSL」が年額36,540円
・対応端末一覧はこちら
・取得手続きは簡単で、その日のうちに証明書が手に入る



App Engineで考えたいのはやはり「1ライセンス買えばサーバー台数の制限なし」の部分。
できればサービスのスタートアップは安く済ませたいですよね。

うちの会社は基本的にスマートフォン用のサービスしか作らないし、
代理店経由ならとても安く買えることがわかりまして・・・(後述します)

Geotrustに決めました。



○SSL証明書の取得

前項で選定した結果、「Geotrust クイックSSL プレミアム」になりました。
ちょうどGeotrustがこの証明書の「テスト用SSLサーバ証明書」を発行してくれるので、
今回はそれを使います。

http://www.geotrust.co.jp/products/testcert.html

このテスト証明書は一度発行すると同じ名前では二度と発行してくれないそうなので、
本当にSSL証明書を取得してテストしたい時に困らないよう、今後使いそうにない名前を使いましょう。

途中でIVR認証(電話がかかってきて数字入力させるヤツ)とか色々ありますが、
手順に添って進めていけば、最後にGeotrustから証明書(と中間証明書)がメールで飛んできます。

自己証明書でも試せるのですけど、
今回はクロスルート証明書も使ってより実践的に解説しているので、
Geotrustでテスト用証明書を取得した方が後の内容をよりお楽しみいただけます。

どうしても面倒だという方は↓で自己証明書を作って次の「SNI形式とVIP形式の選定」に進んでください。
openssl x509 -in ssltest.cabeat-test.jp.csr -days 365 -req -signkey ssltest.cabeat-test.jp.key > ssltest.cabeat-test.jp.crt



○証明書ファイルを作成する

ここまでの手順で3つのファイルができています。
ssltest.cabeat-test.jp.csr(申請時に使う署名要求ファイル)
ssltest.cabeat-test.jp.key(暗号化された秘密鍵)
ssltest.cabeat-test.jp.pem(復号した秘密鍵)

Geotrustから送られてきたメールには、
サーバー証明書(Web Server CERTIFICATE)と中間証明書(INTERMEDIATE CA:)の2つしか書いてないのですが、
この証明書でスマートフォンに完全に対応させるためには
これらに「クロスルート設定用証明書」を追加した3つが必要になるそうです。

apacheでは「サーバー証明書」のファイルと「中間証明書」のファイルをそれぞれ作るようですが、
App Engineの公式ドキュメントには以下のように書いてあります。

---------------------------------------------------------------------------
If the host certificate requires an intermediate or chained certificate (as many Certificate Authorities (CAs) issue),
you will need to append the intermediate or chained certificates to the end of the public certificate file.
---------------------------------------------------------------------------
ホスト証明書が「中間証明書やチェインした証明書」を要求するなら
公開鍵ファイルの最後に「中間証明書やチェインした証明書」を指定する必要がある。(超適当な訳)
---------------------------------------------------------------------------

・一番上に「サーバー証明書」←メールで来た「サーバー証明書」
・その次に「中間CA証明書 3階層目」←メールで来た「中間証明書」
・その次に「中間CA証明書 2階層目」←「クロスルート証明書」

(中間証明書は「3階層目を上に、2階層目を下」の順に書くものらしいです)

参考:SSLサーバー証明書インストール Apache + mod_ssl + OpenSSL[新規・更新]ジオトラスト クイックSSLプレミアム(4階層クロスルート方式)


・「クロスルート証明書」はメールに書いてないのでGeotrustのサイトから持ってきます。
【Q】中間CA証明書をインストールする必要はありますか|FAQ(よくあるお問い合わせ)|サポート|SSLサーバ証明書 ジオトラスト
(なんでこれだけメールに書いてないんでしょうね。。)


※正規の証明書を取得したところ、今度は中間証明書もメールに書いてありませんでした。
 その場合中間証明書も「クロスルート証明書」と一緒に上記Geotrustのサイトから取得できます。


必要なものが揃ったので「証明書ファイル」を作ります。

名前は
「ssltest.cabeat-test.jp.crt」
にしました。

内容は以下のようになります。(以下の順番で。一応間を空けずに書きました)

-----BEGIN CERTIFICATE-----
~~サーバー証明書(Web Server CERTIFICATE)~~
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
~~ジオトラスト クイックSSL プレミアム専用 中間CA証明書 3階層目:Geotrust DV SSL CA~~
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
~~中間CA証明書 2階層目:製品共通 Geotrust Global CA~~
-----END CERTIFICATE-----


apacheは「中間証明書」は別のファイルに指定するのですが、
App Engineでは一つのファイルに書きます。
この順番で正しいのか迷ったのですが、
一般的な中間証明書のファイルはこの順番らしいのでこうしてみました。
(後述の動作確認で検証方法を書きますが、検証した結果これで問題無いと思います)



○SNI形式とVIP形式の選定

Google App EngineのSSLはSNI($9/月)とVIP($39/月)の二種類の形式があります。

VIPは昔ながらの「一つの証明書につき一つのIPアドレスが必要な方法」、
SNIは比較的最近の仕組みで、「一つのIPアドレスで複数のSSL対応ウェブサイトを公開できる方法」です。

VIPはGoogleからIPアドレスを割り当ててもらうことになるので、その辺でお高いのでしょうか。
SNIの方が圧倒的に安いのですが、ここでは$39/月でVIPを一つ借ります。

というのも、AndroidがSNIに対応しているのはHoneycomb(Tablet用の3.0)以降からだそうで、
スマホ向けWebサイトを提供する弊社としては、SNIでは厳しいのです。

実際にテストしたところ、やはり
GalaxyS2(Android2.3)はSNIがNGでVIPはOK、
Galaxy Nexus(Android4.0)はどちらもOK、
という結果になりました。

ちなみにWindows XPではIEもChromeもSNIに対応していないそうなので、
PC向けサイトの場合もXPを非対応にしたくないならやはりSNIは選択肢から外すことになるでしょう。


VIPはイメージ的にこれまで通りにスケールアウトするか心配だったのですが、
先日機会が会って「Google App Engine デベロッパーアドボケイト」の方にお会いする機会があったので、
この点どうなのか質問させていただきました。
その際に「VIPを使ったSSLは非SSLに劣らずスケールアウトする。それを実現するためにリリースに時間がかかってしまった。」
との答えをいただいたので、大丈夫だと思います、たぶん。

※VIPは当初$99でしたが$39に値下がりしました。
Google App Engine Blog: Announcing new pricing for Virtual IP based SSL



○Google AppsでSSLの設定をする

CA Beat エンジニアのブログ-04.ssl01


Appsで「ドメインの設定」→「SSL」と開き、
SSLの課金をするアプリIDを入力して、
「App EngineアプリケーションのSSLを指定有効にする」を押す。


CA Beat エンジニアのブログ-04.ssl02


App Engine専用の管理画面の専用ページの遷移するので「Enable」を押す

※この画面開くのにコツ(条件)がいるようで結構難しいです。
 Google AppsのアカウントとApp Engineのオーナーアカウント
 両方に同時にログインしている必要かあるようです。
 「オーナーアカウントでApp Engineにログインする」→「Appsログイン画面からログインする」
 でうまくいくんじゃないかと。


CA Beat エンジニアのブログ-04.ssl03


「VIPを追加」ボタンを押します。


CA Beat エンジニアのブログ-04.ssl04


VIPが追加されました。「SSL証明書を設定」ボタンを押します。


CA Beat エンジニアのブログ-04.ssl05


「新しい証明書をアップロード」ボタンを押します。


CA Beat エンジニアのブログ-04.ssl06


これは迷いました。

・PEM で暗号化された X.509 証明書
・復号化された PEM で暗号化された RSA 秘密キー

暗号化されてるのか復号されてるのかどっちだ、みたいな。
でも英語版見たらわかりました。

・PEM encoded X.509 Certificate
→PEMでエンコードされた X.509証明書
 →前述の「ssltest.cabeat-test.jp.crt(証明書ファイル)」

・unencrypted PEM encoded RSA private key.
→暗号化されていない、PEMでエンコードされた RSA秘密キー
 →前述の「ssltest.cabeat-test.jp.pem(復号した秘密鍵)」

エンコードを暗号化って訳すからわかりづらいのですね。
2つ選択して「アップロード」を押します。


CA Beat エンジニアのブログ-04.ssl07


証明書がアップロードされました。
「提供モード」を選択します。(VIPを一つしか登録していなければ選択肢は一つしか出ないと思います)


CA Beat エンジニアのブログ-04.ssl08


証明書を適用するURLの選択肢が表示されました。
URLを選択して「追加」ボタンを押し、「変更を保存」ボタンを押します。


CA Beat エンジニアのブログ-04.ssl09


DNSサーバーで「ssltest.cabeat-test.jp」に
「表示されているCNAMEの対象」に表示されているSSL用のホスト名を指定すれば設定は完了です。
(この設定でhttpでもアクセスできるのでご心配なく)


$CA Beat エンジニアのブログ-04.confirm


ブラウザで「https://ssltest.cabeat-test.jp 」のURLにアクセスしてサイトが表示されることを確認します。
CNAMEをVIP用のものに変更しなくてもhttpsでアクセスできるようになっていますが、
この時は「SNI」になっているのではないかと思います。



○SSL証明書が正しく設定できていることを確認する

ブラウザでhttpsでアクセスして接続できることを確認しました。
次は正しく4階層で設定されているかどうかの確認をします。


外部から3階層と4階層の違いはどうやって確認するのでしょうか?

参考:【Q】証明書の階層構造について|FAQ(よくあるお問い合わせ)|サポート|SSLサーバ証明書 ジオトラスト


・3階層の証明書を使ったサイトのURL
クイックSSLプレミアムテストページ3階層

CA Beat エンジニアのブログ-04.ssl10




・4階層の証明書を使ったサイトのURL
クイックSSLプレミアムテストページ4階層

CA Beat エンジニアのブログ-04.ssl11



上はMacのChromeのキャプチャです。
MacのChromeでは「URLの前にある鍵マークをクリック」→「証明書情報」で簡単に参照できます。

しかし、WindowsではIEでもChromeもFire Foxでも、3階層と4階層が同様に表示されて区別がつきません。

そんな時は「SSL証明書のチェックサイト」を使います。
SSL Certificate Tester - Check Certificates


「q3.ssl-process.com」は3階層、
 GeoTrust Global CA
  GeoTrust DV SSL CA
   q3.ssl-process.com

「q4.ssl-process.com」は4階層、
 Equifax
  GeoTrust Global CA
   GeoTrust DV SSL CA
    q4.ssl-process.com

とそれぞれが異なる内容で表示されたのを確認した上で、
「ssltest.cabeat-test.jp」が「q4.ssl-process.com」と同様の階層構造であることを確認できればOKです。



○SSL証明書の代理店について

例えばgeotrust公式サイトで「クイックSSL プレミアム」は年間「\36,540」です。
ジオトラスト クイックSSL プレミアム|製品のご案内|SSLサーバ証明書 ジオトラスト

が、海外の代理店を覗くと
GeoTrust QuickSSL Premium SSL Certificate at $39 | theSSLShop
なんと年間「$59.00」。弊社の購入時で円換算「\4,821」と、激安です。

なぜ代理店を経由するかこんなに安いのか、下記のリンクが参考になるのかもしれません。
第1回 同じSSLサーバー証明書でも、どこで購入するかで価格が違う! 価格差の秘密 | レンタルサーバー完全ガイド

※注意書きに「認証基準」について書かれています。
 「クイックSSL プレミアム」はそもそも「ドメインの存在確認」しかしていないので問題無いと思いますが、
 グレードの高い証明書の場合はこの辺も確認した方が良いのかもしれません。
 国内の代理店でも1万円程度で買えるので、不安な場合はそちらがいいかも?



○証明書更新時の注意

テスト用から本番用の証明書への差し替えで手間取ったのでメモ。
Google Appsで既存の証明書を削除した後、
再度同名の(テスト用では無い本番用の)証明書をUploadして設定したのですが、
すぐに反映されませんでした。
が、一度古い証明書をアップロードし直した後で「証明書を更新」としたところ
すぐに反映されました。

もしかしたら同じ名前の場合はちゃんと「更新」から変更しないといけないのかも?



今回色々勉強になりました。
これまで証明書関連はインフラ担当の方にお任せっきりにしてしまっていて、
代理店で買うと格安なんて全く知りませんでした。
こないだ会社のメールサーバー関連で買ったSSL証明書、定価で3つも買っちゃった。。
すんません社長。(・ω・)



○参考にしたサイト

SSL for a Custom Domain - Google App Engine — Google Developers

Q. ジオトラスト社のSSLサーバー証明書の3階層と4階層のインストールによる違い - Value SSL

WebサーバにSSLの証明書が正しくインストールされているか確認する - @IT


★宣伝★
CA BeatではTwitter、Facebookページの運営も行っております!
ブログの更新情報だけでなく、役立つスマホトピックニュースを
選りすぐって配信中♪

ブログ右サイドバーからぜひフォロー、いいね!してくださいねヽ(´▽`)ノ



この記事をはてなブックマークに追加
最近の画像つき記事 画像一覧へ ]

Amebaおすすめキーワード