3

Java NIO ライブラリを使用してリモート サーバーに接続するためのコードがいくつかあります。コールバックで非同期に接続するコードを書きましたが、ホストが単なる通常の TCP サーバーである場合にうまく機能します。しかし、サーバーが SSL を使用している場合、多くの変更を加える必要があるようです。私がやりたいことは、サーバー証明書が有効かどうか、つまり認証局によって発行され、期限切れになっていないかどうかを確認するポイントまでのみ SSL をセットアップすることです。それ以上のことはしたくありません (名前のチェックなど)。つまり、非常に基本的な SSL 動作が必要なだけです。また、これを Android で実行する予定であるため、クライアント側で外部キーストアやそのすべてをいじることはできません。アプリの内部で必要なことはすべてやりたいです。外部の証明書ファイルを避けることができれば、それは素晴らしいことです。

続行するために正確に何をする必要があるかについて行き詰まっています。次のように、ここでいくつかのNIOソケットセットアップコードを見つけました。

private void setupSecurity() {
    SecureRandom secureRandom = new SecureRandom();
    secureRandom.nextInt();

    KeyStore clientKeyStore = KeyStore.getInstance("JKS");
    clientKeyStore.load(new FileInputStream("client.jks"), "KeyStorePassword".toCharArray()); 

    TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
    tmf.init(clientKeyStore);

    KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
    kmf.init(clientKeyStore, "KeyInKeystorePassword".toCharArray());

    sslContext = SSLContext.getInstance("TLS");
    sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), secureRandom);
}

この後、手動で実装しなければならない、明らかに恐ろしい SSL ハンドシェイク コードがたくさんあります。上記のコードの問題は、client.jks ファイル内に何を入れるべきかが分からないことです。そもそも、ある種のキーストア ファイルを用意する必要はありません。

SSL ソケットを実装すると主張する Naga というライブラリを見つけましたが、セットアップした SSL ソケット サーバーでは動作しません - 例外が発生します: sun.security.provider.certpath.SunCertPathBuilderException: 有効な証明書パスが見つかりません要求されたターゲットへ

続行する方法について何か提案はありますか?

4

2 に答える 2

-4

これは実際にここで議論されました: SSH library for Java .

ここに文書化されている Java Secure Channel (JSCH)を使用することになりました: JSCH javadoc

于 2013-08-13T08:52:50.253 に答える