sách gpt4 ai đã đi

java - 对于我的应用程序的 SSL 使用,我如何影响 'known_hosts' 与 self 认证的服务器?

In lại 作者:太空宇宙 更新时间:2023-11-03 15:05:41 26 4
mua khóa gpt4 Nike

哦,聪明而高贵的甲骨文,

我正在将 SSL 添加到我在 Android 手机上编写的 TCP 客户端。我可以成功连接到具有正确签名证书的服务器,我可以通过编写 TrustManager 实现连接到自认证主机总是认为一切都很好。

我现在有一个装饰器 TrustManager 捕获证书(之前委派给它的装饰者)用于 self 认证的主机并将它们呈现给我气喘吁吁的细读,但我无法解决的是如何实现 ssh警告主机未知并主动记住它的行为下次 - 并这样做。

我假设我需要的只是存储公钥——就像 ssh 一样known_hosts - 并重新表示它,但使用此代码和“sslTrust”持有公钥:

TrustManagerFactory tmf = TrustManagerFactory.getInstance(
TrustManagerFactory.getDefaultAlgorithm());
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(null, null); // initialise!
ks.setKeyEntry("dbentry", Base64.decode(sslTrust, Base64.NO_WRAP), null);
tmf.init(ks);
tms = tmf.getTrustManagers();
ss.stm = new SnoopyTrustManager((X509TrustManager) tms[0]);
// ...
SLContext context = SSLContext.getInstance("SSL");
context.init(null, new TrustManager[] { ss.stm } , null);
ss.factory = context.getSocketFactory();
// ...
SocketFactory factory = ss.getFactory();
mSocket = factory.createSocket(host, port);

尝试建立连接结果

SSLHandshakeException: InvalidAlgorithmParameterException: trustAnchors.isEmpty()

这很公平:我不知道如何根据证书来编造东西由远程服务器提供。我也很确定这不是我告诉TrustManager 关于远程服务器的公钥。

由于该网站是 self 认证的,我想可能只是验证一下公钥在一个普通的 TrustManager 中匹配,但我想了解这“应该”是如何完成的——在每个连接的基础上添加一个 CA,因为我不会因为任何其他事情而信任那个 CA。

1 Câu trả lời

您需要在 ICS 之前的版本上使用您自己的信任库,并在第一次出错时将服务器的证书添加到其中。后续连接将从信任库加载它,从而信任远程证书。这不是一个完整的解决方案,但这是一种实现方法(Github 上的代码)以及一些讨论:

http://nelenkov.blogspot.jp/2011/12/using-custom-certificate-trust-store-on.html

关于java - 对于我的应用程序的 SSL 使用,我如何影响 'known_hosts' 与 self 认证的服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9920896/

26 4 0
太空宇宙
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com