【发布时间】:2014-02-13 17:16:54
【问题描述】:
我正在围绕我们内部使用的一些其他 web 服务构建一个小型包装 java 类。我们使用安全的 HTTPS 连接。通常,SSL 只允许受信任的证书。我希望包装器类的用户能够将 X509Certificate 对象作为包装器构造函数的输入。此证书通常是不安全的,但这就是重点 - 我们希望在内部进行测试而不需要安全的证书。
public ServicesWrapper(String serviceURL, X509Certificate additionalCertificate)
{
//Add the certificate to the trustmanager of the sslcontext.
}
我已经多次看到“信任所有证书”TrustManager 黑客攻击 (like here),但这不是我需要的。我真的很想指定给定的(不受信任的)证书现在应该被认为是受信任的。其他不受信任的证书不好。所以我实现了自己的 TrustManager,但我卡在了 checkTrusted 步骤:
public class NaiveTrustManager implements X509TrustManager
{
//The extra certificate that should be trusted.
private X509Certificate additionalCertificate;
//Constructor
public NaiveTrustManager(X509Certificate _additionalCertificate)
{
additionalCertificate = _additionalCertificate;
}
...other methods here...
public void checkServerTrusted(java.security.cert.X509Certificate[] certificateChain, String authType)
{
for(X509Certificate c : certificateChain)
{
**?????????????????**
pseudocode:
if (c is equal to additionalcertificate)
stop execution, we trust it!
if (nothing matches)
throw certificatEexception
}
}
}
对照证书链检查证书的正确语法是什么?我检查了一些属性,但证书似乎没有名称或 ID 或任何可以匹配或比较它们的内容。
【问题讨论】:
-
您是否需要这个信任管理器来信任其他受信任的证书,或者真的只是这个。
标签: java ssl https x509certificate