2011-03-01 12 views
0

私たちは、HTTPSではなくソケットソケットだけでなく、重要ではないストリーミングサーバーと通信する署名のないアプレットを持っています。すべては、プレーンTCP/IPを使用して結構ですが、私はいつものことでSSLを使用しようとすると:署名されたアプレットは、CA認定SSLサーバと通信できますか?

SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); 
SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(host, port); 

// initiate the handshake (blocks) 
sslsocket.getSession(); 

私はハンドシェイク中に例外を取得します。開発とテストを容易にするために、アプリケーションとして実行していますが、引き続き例外が発生します。

証明書をキーストアに追加するとこれが修正されますが、手動による介入なしに何千ものクライアントに展開したいと考えています。

ウェブを日々検索しました - すべての言葉は「証明書をキーストアに追加する」に終わりますが、通常は自己署名証明書に関連しています。この場合、私たちはpukka証明書を持っています(試用版ですが、JavaのCAリストにあります - 具体的にはdigicertです)。

要するに、アプレットは、その証明書をキーストアに追加することなく、CA署名付き証明書を持つサーバーにSSLを伝えることができますか?

考えられるのは、アプレットを含むJAR内に証明書またはキーストアを追加することです。署名されていないアプレットは、そのような証明書/キーストアを読み込んでインストールできますか?私は、私は、Java Web Startのアプリケーションを展開する似たような状況にされている「CAが証明書に署名したことをサーバーにアプレットトークSSL」を展開する状況ではなかった

おかげで、

+0

これはまだ解決しなければ、例外スタックトレースを投稿できますか? (それはここに問題が何であるか私に興味があります。) –

答えて

0

サンドボックスからの操作を許可するための署名が必要です(クライアントマシン上のファイルの書き込みと読み取り)。私たちはそれを数十の顧客に展開しなければなりませんでした。

私が正しく覚えていれば、手順は難しくありません(あなたはGoogleを利用できます)。独自の証明書を作成することもできますが、「未知のソース」によって署名された証明書についての警告が表示されることがあります。

VeriSignやThawteなど、よく知られているCA機関を使用する方がよいでしょう。 CAは同じものを提供していますが、証明書の価格は大きく異なります。

VerisignはすべてのCAの中で最もよく知られており、最も高価です。あなたがそれらに連絡すると、彼らはあなたを手伝って、プロセスを案内し、優れた技術サポートを提供します。たとえば、暗号化の適切な強さ、アプレット、サーバーなどへのインストール方法についての情報を提供します。さらに、自分のサイトにロゴを入れて、Tシャツやカレンダーなどを送ることもできます毎年:)

Thawteなどの他のプロバイダは、Verisignよりもはるかに安い(半分以下の場合もあります)。私は彼らと一緒に働いていないので、彼らのサービスの質は何かを知ることはできません。

ところで、ドメインとサブドメインが証明書と一致することは非常に重要です。ドメインwww.mydomain.comの証明書を要求し、www2.mydomain.comからアプレットをロードしようとすると、動作しません。 Verisignおよび他の企業は、複数の、または無制限のサブドメインに特別な価格を提供します。

こちらがお役に立てば幸いです。そして何のman-in-the-middleを傍受しようとしていない - 証明書とSSLを使用してのアイデアはI(この場合はアプレットが)私が話を誰に一定にできることである

ルイス

+0

ありがとう。興味をそそるMark ShuttleworthはThawteを立ち上げ、Verisignに売却しました。これが彼の財産の起源です! http://en.wikipedia.org/wiki/Mark_Shuttleworthを参照してください。VerisignとThawteは同じですが、後者はブランド認定資格が低くなります;-)私たちは証明書をdigisignから手に入れました。サーバーに証明書をインストールするのに問題はありません。ブラウザに接続すると、警告ダイアログは表示されません。CAはブラウザの信頼できるルートコレクションにあります。それはまた、Javaの信頼できるCAリストにあります - デバッグオプションと共に表示されます-Djavax.net.debug = all – cbootle

1

、世話をします私。このためには、私がすでに信頼している人物の証明書をすでに持っていなければなりません。

この証明書は、Javaプラグイン(またはJREまたはユーザーキーストア)のキーストアに入れることも、SSLエンジンに信頼できるキーを付けることもできます(ソースのコピーはmy projectです。 )ドイツ語のコメントで:

public class SSLHelper 
{ 

    ... 

    /** 
    * Initialisiert die Client-SocketFactory. 
    */ 
    private void initClient() 
     throws KeyStoreException, NoSuchAlgorithmException, 
       KeyManagementException, IOException, 
       CertificateException 
    { 
     // die Namen für getInstance() sind aus diesem Dokument: 
     // http://java.sun.com/javase/6/docs/technotes/guides/security/StandardNames.html 
     KeyStore keystore = KeyStore.getInstance("jks"); 
     keystore.load(SSLHelper.class 
         .getResourceAsStream("client-keystore.jks"), 
         null); 
     TrustManagerFactory tmf = TrustManagerFactory.getInstance("PKIX"); 
     tmf.init(keystore); 
     SSLContext kontext = SSLContext.getInstance("TLS"); 
     kontext.init(null, tmf.getTrustManagers(), null); 

     clientFactory = kontext.getSocketFactory(); 
    } 
} 

この方法では、SSLクライアントは、指定されたキーストア内の証明書を使用して送信された証明書を比較することができ、そしていくつかが一致した場合、接続が受け入れられています。

もちろん、これは基本的な問題のみをシフトします。これで、アプレット(つまり、キーストアのjarファイル)は、誰も正しい証明書がインストールされていることを確認する代わりに、実行前にman-in-the-middleによって変更されていません。したがって、最大限のセキュリティを確保するために、HTTPS(およびHTTPSページ)だけでアプレットを配信する必要があります。

+0

多くのありがとう - 私は何かを誤解しているようです。非常に参考になった商用のCA(digicert)が署名した証明書があります。ブラウザのルートCAのリストにあるように、ブラウザでうまく動作します。 -Djavax.net.debug = allによるとJavaのリストにもありますので、証明書チェーンが見つかると、確実にキーストアに追加する必要はありませんか?はい、アプレットのページとアプレットはHTTPSによって配信されます。私は、証明書チェーンのセットアップが正しく行われていると確信しています。もし私が持っていれば、エンドユーザはSSLsocketを含め、何も介入せずにアプレットをダウンロードして実行できますか? – cbootle

関連する問題