0

adminアプリのインスタンスとアプリのインスタンスの自己署名証明書を生成しましたjudge。これらのインスタンスは異なるマシンで実行されており、両方に相互の証明書のコピーと独自の証明書があります。私はこれら2つの間でコミュニケーションを取りたいのですが、私の現在のアプローチが正しい方法であるかどうか疑問に思っています。

CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate certificate = cf.generateCertificate(new FileInputStream(...));

KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null, "test".toCharArray());
keyStore.setCertificateEntry("admin", certificate);

// Code omitted which repeats the above to set the judge certificate

TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(keyStore);
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, tmf.getTrustManagers(), null);

factory = ctx.getSocketFactory(); // Or #getServerSocketFactory() if admin and not judge

これにより、2つのインスタンスと安全に通信できるようになりますよね?

4

1 に答える 1

3

いいえ。KeyManager には、証明書エントリではなく、キー エントリを含むキーストアが必要です。JSSE の設計者が意図したとおりにキーストア ファイルを使用するだけです。

于 2012-09-11T23:07:58.503 に答える