java - "java.security.cert.CertificateException: No name matching localhost found"无法在 Ubuntu 16.04 LTS 上解析

标签 java ssl-certificate ubuntu-16.04 x509certificate

  • 我正在尝试从 Ubuntu 16.04 LTS 访问远程服务器。
  • 我已将远程服务器 IP 映射到“localhost:60000”。
  • 我可以通过网络浏览器以及 CURL 命令访问服务器。我得到了预期的答复。

  • 不幸的是,我无法从 Java 代码建立连接,这会导致以下异常,

Exception in thread "main" javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching localhost found

我确实在下面的链接中找到了解决方案:

该问题在 Ubuntu 14.04 计算机上已解决,但在 16.04 计算机上未解决。 谁能告诉我我在 Ubuntu 16.04 上做错了什么吗?

最佳答案

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.client.urlconnection.HTTPSProperties;




TrustManager[] certs = new TrustManager[] {new X509TrustManager() {
    @Override
    public X509Certificate[] getAcceptedIssuers() {
        return null;
    }

    @Override
    public void checkServerTrusted(final X509Certificate[] chain, final String authType) throws CertificateException {}

    @Override
    public void checkClientTrusted(final X509Certificate[] chain, final String authType) throws CertificateException {}
}};

private Client getSSLClient() throws NoSuchAlgorithmException, KeyManagementException {
    HostnameVerifier hostnameVerifier = HttpsURLConnection.getDefaultHostnameVerifier();
    ClientConfig config = new DefaultClientConfig();
    SSLContext ctx = SSLContext.getInstance("TLS");
    ctx.init(null, this.certs, null);
    config.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, new HTTPSProperties(hostnameVerifier, ctx));
    Client client = Client.create(config);
    return client;
}

关于java - "java.security.cert.CertificateException: No name matching localhost found"无法在 Ubuntu 16.04 LTS 上解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47427145/

相关文章:

docker - 在Kubernetes/Nginx中为客户端设置正确的主机名

cassandra - 如何在没有 Cassandra 数据库的情况下安装 Datastax DevCenter

php - 干净安装后的 Laravel "Parse error"

java - 多线程应用程序随着线程数量的增加而增加运行时间

amazon-web-services - AWS CLI - [SSL : CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl. c:1056)

java - CompletableFuture - 并行运行多个 rest 调用并获得不同的结果

php - 如何验证TLS SMTP证书在PHP中有效?

sql-server - 如何在 Ubuntu 上创建 Microsoft SQL Server 的命名实例

java - 在没有站点 :site? 的情况下从 Maven 生成 Findbug HTML 报告的任何简单方法

java - 我可以在 OrientDB 上查询期间访问对象的集群名称吗?