Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PKCS12证书的java客户端握手_Java_Ssl_Handshaking - Fatal编程技术网

使用PKCS12证书的java客户端握手

使用PKCS12证书的java客户端握手,java,ssl,handshaking,Java,Ssl,Handshaking,我使用以下握手代码连接到dc bidden服务器 System.setProperty("javax.net.ssl.keyStore",".p12 file path"); System.setProperty("javax.net.ssl.keyStorePassword",keystorePassword); System.setProperty("javax.net.ssl.keyStoreType",""pkcs12""); 我可以用此代码连接到第一台服务器,但下一台服务器除外 to

我使用以下握手代码连接到dc bidden服务器

System.setProperty("javax.net.ssl.keyStore",".p12 file path");
System.setProperty("javax.net.ssl.keyStorePassword",keystorePassword);
System.setProperty("javax.net.ssl.keyStoreType",""pkcs12"");
我可以用此代码连接到第一台服务器,但下一台服务器除外 tomcat忽略最近的属性集,因此我无法连接到具有相同类型dc bidden服务器的下一个服务器


如果“连接https URL”是指
java.net.URL
类和类似
new java.net.URL(“https://something“”.openConnection()
返回
javax.net.HttpsURLConnection的实现(子类)
以下是我引用的两个示例:

static void SO49993912ExampleClientPKCS12 (String[] args) throws Exception {
    FileInputStream fis = new FileInputStream (args[0]);
    KeyStore ks = KeyStore.getInstance("PKCS12"); 
    ks.load (fis, args[1].toCharArray()); fis.close();
    KeyManagerFactory kf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
    kf.init (ks, args[1].toCharArray());
    SSLContext ctx = SSLContext.getInstance ("TLS"); 
    ctx.init (kf.getKeyManagers(), null /*default TM(s)*/, null);
    // method 1
    HttpsURLConnection conn1 = (HttpsURLConnection) new URL (args[2]).openConnection();
    conn1.setSSLSocketFactory(ctx.getSocketFactory());
    conn1.connect(); System.out.println (conn1.getResponseCode()); conn1.disconnect();
    // method 2
    HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());
    HttpsURLConnection conn2 = (HttpsURLConnection) new URL (args[2]).openConnection();
    conn1.connect(); System.out.println (conn2.getResponseCode()); conn2.disconnect();
}

然而,在Java中有很多其他连接https(和其他)URL的方式;如果您实际上是指其他内容,那么您必须更具体。

我不知道“dc bidden”是什么意思,但是这些sysprops只在第一个TLS默认连接上读取一次——更确切地说是对
SSLContextImpl.getDefaultKeyManager的第一次调用——并在进程的生命周期内缓存。在那之后改变它们没有效果。如果您希望不同的连接使用不同的密钥库,则需要使用显式的
SSLContext
KeyManager
(尽管您仍然可以在适当的情况下默认使用TrustManager).dc bidden意味着需要使用ssl握手访问站点。我们有数字证书和密码,需要在连接时实现。您有示例说明如何连接这些类型的服务器吗?这取决于您进行连接的方式。对于原始
SSLSocket
,通过
KeyManagerFactory
从正确的密钥库中创建
SSLContext
init
,然后获取并使用其
SSLSocketFactory
。对于
[Https]URLConnection
(以及它上面的层)类似地创建
SSLSocketFactory
,并将其设置为每个连接对象或作为
URL.openConnection
之前的默认值。对于Apache
HttpClient
有几种方法,有些方法取决于版本。对于其他事情,这通常取决于这些事情。我们正在连接https URL。你有没有任何例子,你做的参考,这将是很大的帮助