【问题标题】:Need to do a GET&POST HTTPS Request using a .cer certificate需要使用 .cer 证书执行 GET&POST HTTPS 请求
【发布时间】:2017-07-16 09:17:48
【问题描述】:

我有一个 .cer 自签名证书,我需要使用它向 JAVA 中的 Web 服务发出 GET/POST 请求。我对这个概念完全陌生。我在谷歌上搜索了很多关于如何做到这一点,但没有任何帮助。在执行此操作时,我遇到了 java keystore & truststore & 我想这可以用来完成我的任务。有人可以帮助我了解 java Keystore 的工作原理吗?请建议是否有其他方法可以做到这一点。任何形式的帮助表示赞赏。提前致谢。

【问题讨论】:

标签: java web-services https certificate


【解决方案1】:

基本上,密钥库是“地方”(通常是文件),您可以在其中放置数字证书及其相应的私钥(只有当您是证书的所有者时,您才会拥有私钥 - 这是一个简化的解释,但我认为现在已经足够了)

当您获取/发布到 https URL 时,这意味着您正在访问的服务器拥有自己的数字证书。要成功访问它,您需要信任该证书。在java中,您可以通过创建一个包含证书和相应链的密钥库来做到这一点(每个证书都由其他也有证书的实体签名,或者它是自签名的。所以你得到签名的证书,谁的证书签署签名者,依此类推,直到你得到一个自签名的证书,所有这些证书都是链 - 你需要将所有链证书放在密钥库中) 这个特定的密钥库称为信任库(包含所有受信任证书的存储库)。

您拥有的自签名证书是服务的证书吗?如果是这样,只需使用它创建一个密钥库并将其设置为您的信任库。

如何创建密钥库:https://docs.oracle.com/cd/E19509-01/820-3503/ggfen/index.html(或搜索 Keystore 类的示例)

如何设置信任存储:java SSL and cert keystore

【讨论】:

  • 非常感谢您提供的信息丰富的回答。我拥有的证书用于客户端身份验证。许多客户端会调用 Web 服务,并且在这样做时应该对自己进行身份验证。所以在这种情况下,我应该在哪里以及如何添加我的证书,以便通信成功并且我得到来自 web 服务的响应
  • 客户端证书必须在不同的密钥库中并在另一个属性中设置(检查stackoverflow.com/questions/5871279/java-ssl-and-cert-keystore/…,它是 javax.net.ssl.keyStore 和 javax.net.ssl.keyStorePassword)。但是你还需要私钥,否则客户端认证将不起作用
  • 再次感谢。我现在明白的是我只有公钥和证书(.cer 格式)。我不拥有证书。我工作的公司给了它。但是当我使用这个 .cer 文件手动调用 web 服务时,我可以访问它。我已将证书导入 chrome 的个人存储并使用 Postman 扩展来发送请求。如果没有私钥,客户端身份验证如何在这里工作?所以按照您的回复我需要私钥才能在 java 中自动化。我将不得不向所有者索取。我相信我会得到它,但这只是不正确的做法。请提出一些建议!
  • 如果没有私钥也可以工作,所以服务不需要客户端认证
  • 谢谢雨果。我已经成功通过 SSL 验证部分。但是现在该服务为我尝试访问的 url 返回 401 Unauthorized 。当我访问 web 服务的根目录时,我得到 200 OK 响应。你能告诉我为什么会这样吗?
猜你喜欢
  • 1970-01-01
  • 2019-08-16
  • 1970-01-01
  • 2021-10-05
  • 2014-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多