Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/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
Java 如何为RPC连接启用SSL?_Java_Ssl_Https_Certificate_Rpc - Fatal编程技术网

Java 如何为RPC连接启用SSL?

Java 如何为RPC连接启用SSL?,java,ssl,https,certificate,rpc,Java,Ssl,Https,Certificate,Rpc,我让RPC客户端使用以下代码连接到服务器。如果服务器不使用ssl,则此操作有效。但是如果服务器启用sll并给我一个“server.cert”文件->有没有简单的方法 将我的代码转换为https客户端?我是否需要加载证书并以某种方式签署与该证书的连接?我不知道如何开始。或者有关于这方面的简单教程吗 CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials(

我让RPC客户端使用以下代码连接到服务器。如果服务器不使用ssl,则此操作有效。但是如果服务器启用sll并给我一个“server.cert”文件->有没有简单的方法 将我的代码转换为https客户端?我是否需要加载证书并以某种方式签署与该证书的连接?我不知道如何开始。或者有关于这方面的简单教程吗

CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
        new AuthScope("89.232.148.121", 6546),
        new UsernamePasswordCredentials("myUser", "myUserPassword"));
CloseableHttpClient httpclient = HttpClients.custom()
        .setDefaultCredentialsProvider(credsProvider)
        .build();


HttpEntity ent = null;

HttpPost httppost = new HttpPost("http://89.232.148.121:6546");

CloseableHttpResponse response = httpclient.execute(httppost);
编辑

如果我将URL更改为“https”,则会出现以下错误。我尝试使用InstallCert.java来安装我的证书,但这只安装来自目标服务器的一些证书

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
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1868)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1337)
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:154)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:998)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1294)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1321)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1305)
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:533)
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:401)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:177)
    at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:304)
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445)
    at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:863)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)
    at RPCClient.invokeRPC(RPCClient.java:72)
    at RPCClient.getInfo(RPCClient.java:157)
    at RPCClient.main(RPCClient.java:172)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385)
    at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
    at sun.security.validator.Validator.validate(Validator.java:260)
    at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326)
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1319)
    ... 19 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)
    ... 25 more
编辑2

我尝试使用以下命令从服务器导入证书

keytool -import -noprompt -trustcacerts -alias myTestCert -file C:\server.cert 

但我在尝试连接到服务器时仍会遇到相同的错误。

只需将URL更改为https:。如果您遇到问题,请将其编辑到您的问题中。@EJP:我将url更改为https并更新了我的帖子。