服务器端给了我一个 .p12
我已单击并安装在计算机上的证书文件,然后我可以访问 HTTPS
通过浏览器访问网站。现在他们想让我用给出的证书爬网他们的网站。我被困在它的第一个阶段,试图得到 inputStream
从 httpsURLConnection
. 该网站没有登录名。它只检查您是否拥有证书。
到目前为止,我所做的是使用firefox以 .crt
文件格式。然后我使用keytool命令导入它( .crt
文件,而不是 .p12
)进入java密钥库。然后在代码中:
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
File ksFile = new File(keystorePath);
in = new FileInputStream(ksFile);
ks.load(in, "changeit".toCharArray());
X509Certificate cert = (X509Certificate) ks.getCertificate(certificateAlias);
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection con = (HttpsURLConnection) (new URL(urlString)).openConnection();
con.connect();
con.getInputStream();
con.disconnect();
这个 getInputStream()
将给我403错误禁止访问。我搜索过其他相关的主题,实际上比阅读之前更困惑。非常感谢您的回答。
其他详情:
我只是示例化了证书,没有让程序知道任何种类的密钥(私有、公共等)。所以我认为我必须将这些密钥呈现给服务器,让它知道我实际上持有证书。我完全不知道如何做到这一点,无论是在逻辑上还是在语法上。
我尝试使用keytool命令将.p12 cert文件导入密钥库,但不知何故,keytool无法识别-pkcs12选项。任何关于如何直接使用这个的想法。p12证书也会很好。
trustallcert是TrustManger的一个元素数组,它不验证任何内容(TrustAll)。我不知道我是否应该继续使用这个。事实上,现在我只有一个证书可以信任。在这种情况下,编写TrustManager的正确方法是什么?
我无法控制服务器端。我得到的只是访问他们网站的url,这是https协议,还有一个.p12证书。该网站没有登录名。如果安装了证书,我可以进去。
5条答案
按热度按时间nsc4cvqm1#
如果要尝试编写ssl配置代码,可以使用提供给您的p12文件,而无需将其转换为jks。此外,您还需要在p12中使用私钥,而不仅仅是复制到jks中的证书。不确定这是否能直接满足您的需求,但这可能会让您走上正确的道路:
以这种方式配置信任库是可选的。您可以使用p12链中的所有证书创建一个jks,或者确保它们位于jre的cacerts文件中。至于keytool,作为参考,您可以在p12上运行keytool命令(指定-storetype pkcs12),但不能将p12导入jks。也不能使用keytool命令仅从p12导出密钥。
我目前没有服务器设置来测试这段代码,所以试一试,看看你是否仍然收到403错误。
xcitsw882#
添加这个作为答案,因为我需要更多的空间来写。
首先,一个问题:证书是否由可信机构(如verisign)签名?如果不是,信任库应该有ca证书(通常是一个.pem文件),使p12证书“有效”。默认的java信任存储包含来自大公司(如verisign和thawte)的大部分(如果不是全部的话)ca证书。
此外,您可以测试应用程序以连接到安全服务器,而无需对ssl配置进行编码,但需要使用一些命令行参数,例如:
然后你的代码就变成了
如果你觉得受虐狂,jsse参考指南是非常有趣的。
xriantvc3#
这就是我的工作原理:
xvw2m8pv4#
如果您使用的是spring,则可以通过resttemplate访问它:
smdncfj35#
简单的keytool命令会将.p12密钥库导出到.jks密钥库:
keytool -importkeystore -srckeystore keystore.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore keystore.jks