1

Androidアプリをhttps経由でウェブサーバーに接続するには、必要なすべてのSSL証明書を使用してキーストアを構築する必要があります。

これは私の証明書チェーンです(で取得openssl s_client -connect www.myhost.com:443):

 0 s:/C=US/ST=State/L=Location/O=Organization/OU=Webserver Team/CN=www.myhost.com
   i:/C=US/O=Thawte, Inc./CN=Thawte SGC CA - G2
 1 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5
   i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
 2 s:/C=US/O=Thawte, Inc./CN=Thawte SGC CA - G2
   i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5
 3 s:/C=US/O=thawte, Inc./OU=Terms of use at https://www.thawte.com/cps (c)06/CN=thawte Extended Validation SSL CA
   i:/C=US/O=thawte, Inc./OU=Certification Services Division/OU=(c) 2006 thawte, Inc. - For authorized use only/CN=thawte Primary Root CA
 4 s:/C=US/O=thawte, Inc./OU=Certification Services Division/OU=(c) 2006 thawte, Inc. - For authorized use only/CN=thawte Primary Root CA
   i:/C=ZA/ST=Western Cape/L=Cape Town/O=Thawte Consulting cc/OU=Certification Services Division/CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com

私の問題は、Androidアプリケーションにインポートするキーストアを作成する方法が100%わからないことです。VeriSign Class 3 Public Primary Certification Authority - G5Thawte and Thawte Primary Root CAVerisignのWebサイトからしかダウンロードできませんでしたが、私が間違っていなければ、他の2つを見つけることができませThawte SGC CA - G2thawte Extended Validation SSL CA

それらがすべて揃っている場合は、この質問に対するこの回答で説明されている手順を使用して、キーストアの作成に進みます。

私は何かを誤解していますか?4つの証明書すべてが本当に必要ですか?また、これらの証明書をキーストアに追加するときに使用する順序(およびエイリアス)もわかりません。それは重要ですか?

4

2 に答える 2

1

サーバー証明書が VeriSign によって署名されている場合は、インストールする必要はありません。ほとんどの場合、既に Android によって信頼されています。エラーが発生していますか?どのバージョンで?

通常、ルート (CA) 証明書をデバイスのトラスト ストアにインストールするだけで済みます。適切に構成されている場合、すべての中間証明書はサーバーによって送信される必要があります。

于 2012-06-15T03:16:08.727 に答える
0

結局、私の問題は、サーバーが証明書を正しい順序で送信していなかったことです (質問に投稿した openssl 出力から確認できます)。解決策は、サブクラス化X509TrustManagerを行い、 methodcheckServerTrustedで証明書チェーンを並べ替えてからスーパー実装に渡すことでした。並べ替えコードは次のとおりです。

    int currIndex;
    for (currIndex = 0; currIndex < certificates.length; ++currIndex) {
        boolean foundNext = false;
        for (int nextIndex = currIndex + 1; nextIndex < certificates.length; ++nextIndex) {
            if (certificates[currIndex].getIssuerDN().equals(certificates[nextIndex].getSubjectDN())) {
                foundNext = true;
                // Exchange certificates so that 0 through currIndex + 1 are in proper order
                if (nextIndex != currIndex + 1)  {
                    X509Certificate tempCertificate = certificates[nextIndex];
                    certificates[nextIndex] = certificates[currIndex + 1];
                    certificates[currIndex + 1] = tempCertificate;
                }
                break;
             }
         }
         if (!foundNext) break;
     }
于 2012-06-18T09:18:36.500 に答える