- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要创建一个带有 keystore 的 Web 服务客户端。但这是错误:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
我的代码:
private SSLSocketFactory getFactory() throws Exception {
File pKeyFile = new ClassPathResource("jks/dex-client-issuer-wss.jks").getFile();
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("PKIX");
KeyStore keyStore = KeyStore.getInstance("JKS");
InputStream keyInput = new FileInputStream(pKeyFile);
keyStore.load(keyInput, pass.toCharArray());
keyInput.close();
keyManagerFactory.init(keyStore, pass.toCharArray());
SSLContext context = SSLContext.getInstance("TLS");
context.init(keyManagerFactory.getKeyManagers(), null, new SecureRandom());
return context.getSocketFactory();
}
这是http连接:
URL url = new URL("https://dexxis-demo1.gemalto.com/DEX/communication/issuer-interface");
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.setSSLSocketFactory(getFactory());
我只有一个与soap ui配合使用的dex-client-issuer-wss.jks文件,如何创建与此证书文件的连接?
最佳答案
“无法找到有效的证书路径”(在 SSL/TLS 握手期间)与您的 keystore 无关 - 这意味着服务器证书不会针对您的信任库进行验证,因为您将 null 作为第二个参数传递给 context.init
是JRE的默认值,即sysprop javax.net.ssl.trustStore
指定的文件如果另外设置 JRE/lib/security/cacerts
(或 .../jssecacerts
如果存在)。
该服务器正在使用根证书 Gemalto Business Root Certificate Authority
下颁发的证书它不包含在 Oracle Java 包提供的 cacerts 中,也不包含在我所知道的任何其他已建立的信任库中,并且公共(public)透明度日志中不知道它(根据 https://crt.sh )。 SoapUI,大概是因为它被设计为开发、测试和调试工具,会忽略无效或可疑的证书,但浏览器或 curl
或wget
除非您系统上的信任库已被修改或出现其他异常,否则对该 URL 的访问应该会失败。奥托openssl s_client
它主要也是一个调试工具报告错误但仍然建立连接。
如果您确实想信任该 CA 或其(两个)中间机构之一,或者无论如何,您需要在信任库中拥有适当的证书。 通常的做法是信任根 CA 证书,但 Java 支持使用链中的任何证书(包括 EE 证书)作为 anchor 。由于您已经在创建自己的上下文和 key 管理器,因此您不妨创建自己的信任管理器,而不是修改 JRE 默认值,这(通常)依赖于平台/环境,有时很棘手。您可以获取所需的证书并将其放入单独的 keystore 文件中(见下文),加载该文件并使用它来创建信任管理器。或者,由于您已经拥有自己的 key +证书的 keystore 文件,因此 Java 支持在同一文件中同时拥有一个或多个 privateKey 条目和一个或多个其他方的 trustCert 条目,所以你可以将他们的证书添加到现有的 JKS 并使用相同的 KeyStore
TrustManagerFactory
中的对象就像你对 KeyManagerFactory
所做的那样为您的上下文创建 trustmanager 数组。
获得证书的简单方法是:
openssl s_client -showcerts -connect host:port </dev/null
(在 Windows <NUL:
上)-- 使用端口 443;现在许多服务器需要服务器名称指示扩展(又名 SNI),对于低于 1.1.1 的 OpenSSL,您必须添加 -servername host
提供它,但该服务器不提供。这会为来自服务器的每个证书输出一个 PEM block ,每个证书之前的标签显示 s: (subjectname)
和i: (issuername)
。请注意,在第一个证书(根据要求是 EE 证书)之后,该服务器按自上而下的顺序而不是自下而上的顺序发送 CA 证书。这在技术上违反了 RFC 5246(或更早的 4346 或 2246); TLS1.3 的 RFC 8446 允许这样做,因为它已经是一个常见的扩展,并且 Java JSSE 特别支持它。
keytool -printcert -rfc -sslserver host
-- 还支持host:port
但默认值是 443,这对你来说没问题。这仅输出 PEM block ,因此,如果您还没有从我的上一篇文章中了解顺序,则必须解码每个 block 以找出哪个是哪个,或者只是进行实验,直到找到正确的 block 。
无论哪种情况,都获取所需的 PEM block 并将其放入文件中,然后执行
keytool -importcert -keystore jksfile -alias somealias -file thecertfile
somealias
仅要求在文件中是唯一的(如果将其放入自己的文件中,则很简单)并且不区分大小写(通常为小写),但应该是描述性的或助记性的,并且仅在可能的情况下才包含字母数字。然后使用上面生成的文件。
关于java - Web 服务客户端 - 带有 keystore ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58397803/
我有一个几乎可以构建的Maven / Grails应用,但在web.xml上找不到[my-app]\webapp\WEB-INF\web.xml。但是目录结构像往常一样包含web-app文件夹,而不是
正如我在标题中提到的:我想知道 web-service 和 web-socket 之间的区别?我们什么时候使用每一个? 谢谢! 最佳答案 一个web service是一个响应客户端 SOAP/REST
让我们看一个示例场景: 客户端打开一个网站并找到他从文本框中输入的两个数字的总和。然后单击“添加”按钮。两个参数通过 HTTP GET 发送到服务器,在服务器上写入 PHP 代码以添加数字,结果为回声
我知道这是一个老问题,肯定已经被回答了数百次,但我还无法找到令人满意的答案。 我正在创建一个应用程序,其他应用程序(移动/网络)将使用该应用程序来获取数据。现在我有两个选择: 将我的应用程序创建为简单
通过 Web 作业部署新功能有 3 种方法: 创建一个新的 Web 应用,并部署一个包含该函数的 Web 作业。 向现有 Web 作业添加一项新函数(这样您现在在一个 Web 作业中就拥有了多个函数)
我收到来自网络场景的通知,上面写着“问题”和“确定”。我想在问题发生时包含网络响应的内容。我不担心标题值,只担心网页的内容. 这是我可以在通知设置中引用的变量吗? 最佳答案 不幸的是 zabbix 不
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
嗨,这是一个理论问题,但我真的无法弄清楚 Web 应用程序、基于 Web 的应用程序和基于云的应用程序之间的区别。这个你能帮我吗。 最佳答案 @Matt 是对的 - 这真的无关紧要,但是,为了清楚起见
我正在尝试使用多个 Web 服务,这些服务在它们的 wsdl 中重新定义了一些相同的公共(public)类。我目前在网站中引用了它们,但我想转换为 Web 应用程序。 由于一些相同的类是从多个 Web
一个。我必须考虑哪些事项?b.当前应用程序正在执行多个存储过程。如果我创建等效的方法来执行这些过程,会有什么风险或挑战。 最佳答案 在架构上,将网络应用程序转换为网络服务时必须考虑的一件事是,对方法和
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。 Improve thi
网络 API 和网络服务之间有什么区别吗?或者它们是同一个吗? 最佳答案 网络服务通常提供 WSDL您可以从中自动创建客户端 stub 。 Web 服务基于 SOAP protocol 。ASP.NE
我已经获得了我需要的所有资源。我将 Web 服务放入应用程序服务环境中,然后将 NSG 连接到应用程序服务环境使用的子网。然后,我允许 VNET 内的应用程序与 Web 服务进行通信,但它无法正常工作
我已经获得了我需要的所有资源。我将 Web 服务放入应用程序服务环境中,然后将 NSG 连接到应用程序服务环境使用的子网。然后,我允许 VNET 内的应用程序与 Web 服务进行通信,但它无法正常工作
我正在使用 stub 将我的网络服务相关测试与实际网络服务隔离开来。 你/我应该如何合并测试以确保我制作的响应与实际的网络服务匹配(我无法控制它)? 我不想知道怎么做,而是何时何地? 我应该为测试数据
我在互联网上搜索了很多,但我仍然没有得到网络服务和网络 API 之间的明显区别?我在某处读到所有 Web 服务都是 API,但所有 API 都不是 Web 服务。如何? 我所知道的是两者都允许利用其他
假设我已经完成了使用 JavaEE 制作的 Web 应用程序。这个 Web 应用程序包含登录系统,但最后它是非常基本的 Web 应用程序。我使用的是 GlassFish 3.1.2.2。 我想知道一旦
我希望设计者能够打开与我相同的解决方案文件。这可以通过 Expressions Web 实现吗? 最佳答案 简短的回答是“不”;但这是一个非常常见的请求,我知道很多人都希望下一个版本(无论何时)对此有
我正在尝试在 CF10 中创建一个 Web 服务对象。我已验证它在 SoapUI 中按预期工作。但是,当我在 CF 中运行它时,我得到一个错误,它无法找到在 WSDL 的导入语句中导入的 XSD。这是
我的要求是开发一个 Web 服务,充当外部 Web 服务和客户端之间的中间人。 我知道,我可以为我的服务设计一个wsdl,然后将外部wsdl映射到代码中我的wsdl。我的问题是有一个开源 api/工具
我是一名优秀的程序员,十分优秀!