相关疑难解决方法(0)

Java:通过资源加载SSL密钥库

如果我有:

System.setProperty("javax.net.ssl.keyStore", '/etc/certificates/fdms/WS1001237590._.1.ks');
System.setProperty("javax.net.ssl.keyStorePassword", 'DV8u4xRVDq');
System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");
Run Code Online (Sandbox Code Playgroud)

我可以毫无问题地打开安全连接.

但是,我想将证书直接存储在战争中,所以我使用:(文件输入流最终将成为资源流,但我这样做是为了让它工作.)

System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream("/etc/certificates/fdms/WS1001237590._.1.ks"), "DV8u4xRVDq".toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, "DV8u4xRVDq".toCharArray());
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(kmf.getKeyManagers(), null, null);
Run Code Online (Sandbox Code Playgroud)

现在,如果我打开相同的连接,我得到: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

java ssl keystore ssl-certificate

11
推荐指数
2
解决办法
4万
查看次数

使用Axis2附加客户端证书?

是否可以轻松地将客户端证书附加到使用wsdl2java生成的Axis2存根?我需要在每个请求的基础上动态更改客户端证书,因此只需将其存储在密钥库中就不适用于我们的情况.

我已经找到了为非SOAP调用执行此操作的示例,但找不到与使用Axis客户端存根相关的任何内容.试图破解XML for SOAP调用是一个选项,我猜,albiet是一个痛苦的选择!呻吟!

java ssl axis axis2 ssl-certificate

8
推荐指数
1
解决办法
1万
查看次数

Java忽略证书验证

我正在尝试创建一些连接到自签名HTTPS服务器的示例Java项目.我似乎无法让Java停止尝试验证证书.我不想相信这个证书,我只想完全忽略所有证书验证; 这个服务器在我的网络中,我希望能够运行一些测试应用程序而不必担心证书是否有效.

java -Dcom.sun.net.ssl.checkRevocation=false HelloWorld
org.apache.axis2.AxisFault: Connection has been shutdown: 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
Run Code Online (Sandbox Code Playgroud)

-Dcom.sun.net.ssl.checkRevocation =假没有帮助.我还尝试添加以下代码:

public static void DisableCertificateValidation() {
  TrustManager[] trustAllCerts = new TrustManager[]{
    new X509TrustManager() {
      public X509Certificate[] getAcceptedIssuers() { return null; }
      public void checkClientTrusted(X509Certificate[] certs, String authType) { }
      public void checkServerTrusted(X509Certificate[] certs, String authType) { }
    }
  };
  try {
    SSLContext sc = SSLContext.getInstance("SSL");
    sc.init(null, trustAllCerts, new java.security.SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
  } …
Run Code Online (Sandbox Code Playgroud)

java ssl-certificate

6
推荐指数
1
解决办法
2万
查看次数

如果有多个匹配的证书,如何选择SSL客户端证书?

这不是设计应该发生的事情,但出于安全考虑,我想知道如何将"正确"的证书发送到服务器,假设有多个证书符合某个CA签名的要求?

我正在使用一个简单的SSL JAVA示例客户端,连接到Apache HTTPD.

我尝试使用4个证书进行测试,每次都删除所选的证书,并注意下一个选择了谁.除了证书的"sha256"的词典顺序之外,我找不到合理的逻辑(即日期,别名等).这似乎不太可能......

示例客户端执行类似的操作

System.setProperty("javax.net.ssl.keyStore","device.p12");  
System.setProperty("javax.net.ssl.keyStorePassword","password");  
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");  
System.setProperty("javax.net.ssl.trustStore","truststore.jks");  
System.setProperty("javax.net.ssl.trustStorePassword","password");  
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();  
SSLSocket sslSock = (SSLSocket) factory.createSocket("87.69.60.100",443);  
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(sslSock.getOutputStream(), "UTF8"));  
wr.write("GET /lather HTTP/1.1\r\nhost: 87.69.60.100\r\n\r\n");  
wr.flush();  
Run Code Online (Sandbox Code Playgroud)

Apache配置了

SSLCACertificateFile rootCA.crt  
SSLVerifyClient require  
Run Code Online (Sandbox Code Playgroud)

我找不到相关文件来回答这个问题.我也想知道 - Apache是​​否有可能以某种方式转发多个证书链?(对于一个行为不端的客户发送一些奇怪的东西).

谢谢!

java apache ssl ssl-certificate

6
推荐指数
1
解决办法
7057
查看次数

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

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

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

当我将其移至企业Java环境时,问题就出现了.要求规定代码必须是在Glassfish应用程序服务器上运行的Enterprise Archive中的Enterprise 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设置为Web服务服务器,而不是Web服务客户端.

我有一个服务器的.cer证书文件,我把它添加到我的信任存储区,使用Java keytool将它添加到默认cacerts文件中.根据http://blog.johnryding.com/post/1548502059/acquire-an-ssl-certificate-for-your-java-programs-中的步骤,修改包含自签名证书的cacerts文件会更好吗?双赢InstallCert

我有信任存储文件,密钥存储文件,以及.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");
RequestObject request = new RequestObject;
request.setQuery("some data");
request.setUsername("user");
request.setPassword("pass");
Service service = new Service();
Endpoint port = service.getWebServicePort();
Result result …

authentication ssl ejb glassfish java-ee

4
推荐指数
1
解决办法
9440
查看次数