gpt4 book ai didi

authentication - 使用相互 SSL 将 Glassfish 配置为 Web 服务的客户端

转载 作者:太空宇宙 更新时间:2023-11-03 12:47:52 25 4
gpt4 key购买 nike

我正在尝试从 Web 服务请求数据,该服务需要客户端提供客户端证书。服务器对所有通信使用 SSL,并使用自签名证书。我为 Netbeans 提供了服务的 WSDL 文件,它使用 wsimport 生成了客户端代码.

当我的客户端代码是用常规 Java 应用程序编写时,我没有任何问题;我将信任库设置为 cacerts包含服务器证书的文件,将 keystore 设置为服务器管理员以 JKS 格式提供的包含 2 个 key 的文件 - 客户端私钥和服务器的公钥,构建请求对象,并发送请求。

当我将其移至企业 Java 环境时,问题就来了。要求规定代码必须是在 Glassfish 应用服务器上运行的企业存档内的企业 JavaBean。看起来 Glassfish 有自己的安全设置,可以覆盖 JVM 的设置。当包含 Web 服务调用的 EJB 方法运行时,SSL 协商失败:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target .我不知道如何像我的 JVM 设置一样设置 Glassfish 的安全设置,任何人都可以解释 Glassfish 的安全设置吗?我所做的研究只展示了如何将 Glassfish 设置为网络服务服务器,而不是网络服务客户端

我有一个服务器的 .cer 证书文件,我使用 Java 的 keytool 将它添加到我的信任库中将其添加到默认 cacerts文件。修改cacerts会不会更好文件 InstallCert要包含自签名证书,请按照 http://blog.johnryding.com/post/1548502059/acquire-an-ssl-certificate-for-your-java-programs-in-win 中的步骤操作?

我有信任存储文件、 key 存储文件以及一个 .cer 证书文件和一个 .p12 浏览器证书,存储在 $JAVA_HOME/jre/lib/security 和 $JAVA_HOME/lib/security 中。

我使用的是 Netbeans 6.9.1 和 Glassfish 3.1 Final。相关代码如下,是从我的 EJB 复制而来的。异常发生在最后一行。

System.setProperty("javax.net.ssl.trustStore", "C:\\jssecacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
System.setProperty("javax.net.ssl.keyStore", "C:\\userCertificate.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "password");<br/>
RequestObject request = new RequestObject;<br/>
request.setQuery("some data");<br/>
request.setUsername("user");<br/>
request.setPassword("pass");<br/>
Service service = new Service();<br/>
Endpoint port = service.getWebServicePort();<br/>
Result result = port.specificWebServiceMethod(request);

最佳答案

我遇到了与 Jacques Pritchard 上述相同的异常:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

解决了它使用以下命令在 cacerts.jks 和 keystore.jks 中导入根证书:

/usr/java/jdk1.6.0_25/bin/keytool -import -trustcacerts -file root_ca.cer -alias rootca -keystore cacerts.jks

/usr/java/jdk1.6.0_25/bin/keytool -import -trustcacerts -file root_ca.cer -alias rootca -keystore keystore.jks

重要的是,别名 rootca 是我自己定义的一个名称,用于标记证书。您也可以选择任何名称。

关于authentication - 使用相互 SSL 将 Glassfish 配置为 Web 服务的客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6261058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com