小编Nam*_*ela的帖子

使用给定的p12证书连接到https站点

服务器端给了我一个.p12证书文件,我点击并安装在我的机器上然后我可以HTTPS通过浏览器访问该站点.现在他们希望我用给出的证书抓取他们的网站.我卡在它的第一个阶段,试图让inputStreamhttpsURLConnection.该网站没有登录.它只会检查您是否拥有证书.

到目前为止我所做的是使用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();
Run Code Online (Sandbox Code Playgroud)

getInputStream()将给我403错误禁止访问.我搜索了其他相关主题,实际上比阅读之前更加困惑.非常感谢答案.

额外细节:

  • 我只是实例化了证书,并且没有让程序知道任何类型的密钥(私有,公共等).所以我认为我必须将这些密钥提供给服务器,让它知道我实际上持有证书.我完全不知道如何做到这一点,无论是逻辑还是语法.
  • 我已经尝试过keytool命令将.p12证书文件导入密钥库但不知何故,keytool无法识别-pkcs12选项.关于如何直接使用这个.p12证书的任何想法都会很棒.
  • trustAllCert是TrustMangers的一个元素数组,它不验证任何东西(全部信任).我不知道我是否应该继续使用它.事实上,现在我实际上只有一个证书可以信任.在这种情况下编写trustManger的正确方法是什么?
  • 我无法控制服务器端.我所获得的只是访问其网站的URL,它是在HTTPS协议下的,以及.p12证书.该网站没有登录.如果安装了证书,我可以进去.

java https certificate

31
推荐指数
3
解决办法
5万
查看次数

标签 统计

certificate ×1

https ×1

java ×1