我使用本指南为 Metro 创建证书:http ://www.jroller.com/gmazza/entry/using_openssl_to_create_certificates
所以我现在有了 servicestore.jks 和 clientstore.jks。
当我检查密钥库时,我看到 servicestore.jks 中的 PrivateKeyEntry 是 myservicekey,trustedCertEntry 是 myclientkey。在 clientstore.jks 中反之亦然。
我在客户端 xml 和服务 wsit xml 中使用这些。我按照官方 WSIT 教程在 Netbeans 中执行此操作。一切都部署得很好。
因此,当测试来自客户端的方法调用时,我得到以下异常:
[#|2011-10-19T08:59:38.465+0200|INFO|glassfish3.1.1|com.sun.metro.policy|_ThreadID=81;_ThreadName=http-thread-pool-8080(1);|WSP5018: 已加载来自文件的 WSIT 配置:file:/opt/glassfish3/glassfish/domains/domain1/applications/testwebapp/WEB-INF/classes/META-INF/wsit-client.xml.|#]
[#|2011-10-19T08:59:41.167+0200|SEVERE|glassfish3.1.1|javax.enterprise.resource.xml.webservices.security|_ThreadID=84;_ThreadName=http-thread-pool-8080(4); |WSS1533: 验证自签名证书失败。|#]
[#|2011-10-19T08:59:41.171+0200|SEVERE|glassfish3.1.1|com.sun.xml.wss.provider.wsit|_ThreadID=84;_ThreadName=http-thread-pool-8080(4); |WSITPVD0035: 验证入站消息中的安全性时出错。com.sun.xml.wss.XWSSecurityException:自签名证书的验证在 com.sun.xml.wss.impl.misc.WSITProviderSecurityEnvironment.validateCertificate(WSITProviderSecurityEnvironment.java:937) 在 com.sun.xml.ws.security 失败。 opt.impl.incoming.X509BinarySecurityToken.validate(X509BinarySecurityToken.java:185) 在 com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.handleSecurityHeader(SecurityRecipient.java:396) 在 com.sun.xml。 ws.security.opt.impl.incoming.SecurityRecipient.cacheHeaders(SecurityRecipient.java:275) 在 com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient。
当我尝试在客户端 xml 中使用错误密码时,我得到了一个不同的异常,当我使用了错误的文件名时,我得到了一个找不到文件的异常。所以它至少找到了clientstore。
所以我认为服务密钥库可能有问题(我认为它可能使用了默认的 glassfish 而不是我自己的)并在 domain.xml 中找到了一些选项。所以我改变了这些:
-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=myservicekey -Djavax.net.ssl.keyStore=${com.sun.aas.instanceRoot}/config/servicestore.jks -Djavax.net.ssl.keyStorePassword=sspas -Djavax。 net.ssl.trustStore=${com.sun.aas.instanceRoot}/config/servicestore.jks -Djavax.net.ssl.trustStorePassword=sspass -DSERVER_KEY_ALIAS=myservicekey -DCLIENT_KEY_ALIAS=myclientkey
但是当我重新启动服务器时,出现此异常并且无法登录管理控制台:
............. 原因:java.io.IOException: Keystore was tampered, or password is wrong at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:772) at sun .security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55) at java.security.KeyStore.load(KeyStore.java:1214) at com.sun.enterprise.security.ssl.impl.SecuritySupportImpl.loadKS(SecuritySupportImpl .java:254) at com.sun.enterprise.security.ssl.impl.SecuritySupportImpl.loadStores(SecuritySupportImpl.java:208) ... 63 更多原因:java.security.UnrecoverableKeyException:sun.security 的密码验证失败。 provider.JavaKeyStore.engineLoad(JavaKeyStore.java:770) ... 67 更多
然后我在 WSIT 教程中阅读了以下内容: 为了在 Glassfish 上使用 WSIT 安全性,您必须将受信任的存储导入 GlassFish 的密钥库并从 NetBeans IDE 指定这些证书。
所以我不能使用自己的密钥库?更改 domain.xml 时我错过了什么吗?还是在整个 jvm 选项之前我出错了?