iMT絡み

先日サーバを移行したので、SSLで使っているサーバ証明書も新たに準備したのですが、Android 2.1から見るとSSLの証明書が不正な証明書と表示されていました(>_<)


もちろんFirefox, Google Chromeなどで表示させると正しいルート証明書として認識されるのですが、何故かAndroid 2.1からはダメ。わざわざ高い金を払って手に入れた証明書ですから正しい証明書として機能してくれないのは非常に残念な状態な訳です。
調べてみたところ、昨年の7月以前に取得した証明書はEquifaxの1024bitルート証明書だったのですが、それ以後に取得した証明書は RapidSSLの2048bitのルート証明書が使われているため、Android 2.1にルート証明書として登録されていないようなのです。その為、クロスルート証明書を使ってEquifax -> Geotrust -> RapidSSL -> サーバ証明書という4層にする必要があるとRapidSSLのサイトに情報がありました。

RapidSSLサーバー証明書のAndroidスマートフォン対応につきまして - ValueSSL

ActiveSync failing on mobile devices for RapidSSL certificate issued after December 9, 2010 - RapidSSL

具体的にはRapidSSL Intermediate CAの証明書とGeoTrust Cross Root CAのクロスルート証明書を1つのファイルに記述してchainファイルとしてApacheに登録する必要がありました。

通常のSSLサーバでは<IfModule mod_ssl.c>内に

SSLCertificateFile    /etc/ssl/certs/サーバ証明書.crt
SSLCertificateKeyFile /etc/ssl/private/秘密鍵.key

と記述する必要が有るのですが、クロスルート証明書を用いた方法の場合はさらに

SSLCertificateChainFile /etc/ssl/certs/クロスルート証明書.chain

と記述する必要があるという事になります。これまで中間証明書を使ったサイトを構築したことが無かったので、予想外に手間取ってしまいました。

ApacheでSSLサイトを構築する方法はあちこちに色々っと書かれているので今更ですが備忘録として改めて記載します。

  1. 秘密鍵を作成する。ここでは鍵長は2048ビットにしますが、認証局から指定が有る場合はそれに合わせます。

    $ openssl genrsa -des 2048 > private.key
    Generating RSA private key, 2048 bit long modulus
    .........................................................+++
    .........................+++
    e is 65537 (0x10001)
    Enter pass phrase:(パスフレーズ入力)
    Verifying - Enter pass phrase:(パスフレーズ入力)
    
  2. CSR(CERTIFICATE REQUEST)を作成する。

    $ openssl req -new -key private.key -out request.csr
    Enter pass phrase for test.rsa:(パスフレーズ入力)
    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) [GB]:JP (国名)
    State or Province Name (full name) [Berkshire]:Hokkaido (県名)
    Locality Name (eg, city) [Newbury]:Sapporo (市)
    Organization Name (eg, company) [My Company Ltd]:Chiryoufuka (組織名)
    Organizational Unit Name (eg, section) []:Chiryoufuka (部署名)
    Common Name (eg, your name or your server's hostname) []:1x4x9.net (証明書を使用するFQDN)
    Email Address []:(空白)
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:(空白)
    An optional company name []:(空白)
    

    作成されたCSRをCA(認証局)に送り、サーバ証明書を交付してもらう。

  3. 秘密鍵にパスフレーズを埋め込み、パスフレーズの入力無しでサーバが起動できるようにする

    $ openssl rsa < private.key > private-nopass.key
    Enter pass phrase:(パスフレーズ入力)
    writing RSA key
上記の手順で認証局から受け取ったサーバ証明書とパスフレーズを消した秘密鍵のキーペアが出来るので、あとはサーバに登録します。