Facebookアプリ開発HelloWorldの準備(サブドメインにHTTPS接続)

Facebookアプリ用のサブドメインを用意する

サブドメインの切り方、/etc/httpd/conf/httpd.confの編集はここを参照。

今回は、fb.というサブドメインを切った。

この内容に沿うように、サーバの/etc/httpd/conf/httpd.confを編集する。

-----追記した内容-----
<VirtualHost *:80>
        ServerName fb.tan-nai.com
        DocumentRoot /var/www/html/fb
        <Directory /var/www/html/fb/>
                AllowOverride ALL
                Options FollowSymLinks
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>
-----ここまで-----
以後は、例えば /var/www/html/fb/test.php を置いて http://fb.◯◯.com/test.php と入力すれば、ちゃんとアクセスできる。
 
サブドメインSSLサーバ証明書をインストールする
Facebookアプリの開発には、https接続が必須である。したがって、認証局に申請して有料の証明書を入手し、インストールしなければならない。
金をかけてられないので、目についた中では一番安いエコサートに申請することにした。30日無料トライアルもできるし。
まずは、サーバ上で乱数から秘密鍵CSRファイルを作成する。
参考にしたのはエコサート公式マニュアルここ。公式ではDebian使ってるけど、僕の環境はCentOSだから少し変わる部分もある。
入力した部分は赤字にしてある。この内容を申請フォームに入力するので、正確に記述するらしい。
$ sudo yum install mod_ssl
$ openssl md5 * > rand.dat
$ sudo openssl genrsa -des3 -out /etc/httpd/conf/ssl.key -rand rand.dat 2048
143 semi-random bytes loaded
Generating RSA private key, 2048 bit long modulus
......................+++
..........+++
e is 65537 (0x10001)
Enter pass phrase for /etc/httpd/conf/ssl.key:(パスフレーズを入力)
Verifying - Enter pass phrase for /etc/httpd/conf/ssl.key:(パスフレーズを再入力)
$ sudo openssl req -nodes -newkey rsa:2048 -keyout /etc/httpd/conf/ssl.key -out /etc/httpd/conf/ssl.csr
Generating a 2048 bit RSA private key
..............................................................................................+++
.............................................+++
writing new private key to '/etc/httpd/conf/ssl.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) :Niigata
Locality Name (eg, city) [Default City]:Niigata
Organization Name (eg, company) [Default Company Ltd]:(本名)
Organizational Unit Name (eg, section) :
Common Name (eg, your name or your server's hostname) :fb.◯◯.com
Email Address :
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password :
An optional company name :
$ cat /etc/httpd/conf/ssl.csr 
-----BEGIN CERTIFICATE REQUEST-----
(鍵の中身)
-----END CERTIFICATE REQUEST-----
 
この-----BEGIN CERTIFICATE REQUEST-----から-----END CERTIFICATE REQUEST-----までを、次の申請フォームにコピペする。中身だけコピペしても、エラーを返された。
 
ここで、CSR作成に使用したソフトウェアを入力するらしいんだけど、プルダウンの中にCentOS/Apache/OpenSSL的な選択肢が無かったので、"Apache+ModSSL"を選んだ。結果的に上手く行ったから良しとする。
入力が終わると、すぐに"DigiTrustサーバー証明書申請手続き中のお客様へ"と本文に書かれたメールが送られて...って、DigiTrustってなんだ?
一応公式の指示通り、メールには認証URLとバリデーションコードが記載されていたため、認証を行った。
30分位待つと、「株式会社エムアンドティーテクノロジー」と「Comodo Services Security」発の二通のメールが送られてきた。なんか聞かない名前がたくさん並んでる...大丈夫なのだろうか。
ここの「証明書のインストール方法」ってPDFを見ようとリンクをクリックしても表示されない...。問題だな。約款にも誤字あったし、やっぱこの会社ダメっぽい...?
「Comodo Services Security」に添付された証明書フォルダの中には、
  • Root CA Certificate - AddTrustExternalCARoot.crt
  • Intermediate CA Certificate - PositiveSSLCA2.crt
  • Your EcoCert Trial Certificate - fb_◯◯◯◯◯◯◯_com.crt
が入っていた。◯の数が多いのは、このブログを書いているエディタの挙動のためであり、特に意味はありません。
ここを参考にして、まずはダウンロードした証明書3つをサーバにアップロードする。作業用端末から
$ scp -P ポート番号 ~/Downloads/fb_◯◯_com/* admin@◯◯.com:/home/admin
AddTrustExternalCARoot.crt                    100% 1521     1.5KB/s   00:00    
PositiveSSLCA2.crt                            100% 1757     1.7KB/s   00:00    
fb_◯◯_com.crt                            100% 1842     1.8KB/s   00:00 
 
で、サーバ側で
$ sudo mkdir /etc/ssl/ssl.crt /etc/ssl/ssl.key
$ sudo cp /etc/httpd/conf/ssl.key /etc/ssl/ssl.key/ ←さっきopenssl reqで生成した鍵(Pryvate Keyと言うらしい)をコピー
バンドルファイルが無かったので、ここを見て作る。
$ sudo cat AddTrustExternalCARoot.crt PositiveSSLCA2.crt fb_◯◯_com.crt > fb_◯◯_com.ca-bundle
$ sudo cp fb_tan-nai_com.ca-bundle fb_tan-nai_com.crt /etc/ssl/ssl.crt/
$ sudo vim /etc/httpd/conf/httpd.conf ←サブドメイン切るときに追記したバーチャルホストセクションに赤字を追記する
<VirtualHost *:80>
        ServerName fb.tan-nai.com
        DocumentRoot /var/www/html/fb
        SSLEngine on
        SSLCertificateKeyFile /etc/ssl/ssl.key/ssl.key
        SSLCertificateFIle /etc/ssl/ssl.crt/fb_◯◯_com.crt
        SSLCertificateChainFile /etc/ssl/ssl.crt/fb_◯◯_com.ca-bundle
        <Directory /var/www/html/fb/>
                AllowOverride ALL
                Options FollowSymLinks
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>
 
ここによると、プライベートキーのパスフレーズを外さなければいけないらしいので、
$ sudo openssl rsa -in /etc/ssl/ssl.key/ssl.key -out /etc/ssl/ssl.key/ssl.key
あとパーミッションをいじったり。
$ sudo chmod 600 /etc/ssl/ssl.key/ssl.key
そして恐怖のApache再起動
$ sudo service httpd restart
そしてブラウザのアドレスバーに"https://fb.◯◯.com"と入れると...
はい、Bad Requestですよorz
 
少し調べると、「httpsを443のセキュアポートで受けて...」というような記述があった。
主要なポート以外はファイヤーウォール(iptables)でREJECTしていたことを思い出して、
$ sudo vim /etc/sysconfig/iptables
やっぱり443は閉じていたので、ここを開ける
$ sudo /etc/rc.d/init.d/iptables restart
 
これで、本当に、FacebookサブドメインHTTPSアクセス出来た〜!!!!
あとは、操作ミスが怖くて残していた鍵とかを消して、終了!!
半日がかりになってしまった...
 
-----追記-----
証明書が信頼できないって言われる。
対処は少し休んでからで...
 
-----さらに追記-----
明け方に探してみると、公式に証明書のインストール方法が乗ってた。疑ってごめんよエコサート...
と思っていると、昨日エコサートの公式サポートに送った問い合わせメールがMAILER DAMONになって帰ってきたよ\(^o^)/やっぱこの会社は...
 
しかも、そのマニュアルによると"UTNAddTrustServerCA.crt"ってのが必要らしいんだけど、Comodo Securty Serviceに添付されたzipの中には無い。
そして、PositiveSSLCA2.crtとか昨日の時点では疑わずに書いていたけど、2ってなんだよ2ってorz
まとめると、
  • Comodo(この名前が出てくることは聞いていない)」発のzipファイルには"AddTrustExternalCARoot.crt", "fb_◯◯_com.crt", "PositiveSSLCA2.crt"があった
  • エコサートのマニュアルのリンク(利用手順からPDFが開けるらしいが無理。トップページからでなければ見られない)からダウンロードできる中間証明書は"PositiveSSLCA.crt"
  • マニュアルに記載されている"UTNAddTrustServerCA.crt"なんて無い
  • 約款に誤字
  • info@に送っても届かない
やっぱこの会社やめとく。
 
ちょっと"SSL 格安"で調べると、サポートや信頼は値段に比例することが分かった。当たり前といえば当たり前。
大抵の認証局は「代行」をしているだけのようで、どこもあまり変わらないらしい。(もちろん、ベリサインみたいな超王手EV SSL認証局は別)
大筋の手順は分かったし、今度時間があるときにまたトライする。
 
それにしても、安物買いの銭失いとは良く言ったものだ。格安SSLの無料トライアルで計8時間を失ってしまった。