我正在尝试向服务器发送请求但它遇到以下错误,因为我知道应该创建一个证书但不知道如何做。我发现了这个answer但无法实现它。
java.security.cert.CertificateException: No subject alternative DNS name matching www.example.com found.
代码
URL url = new URL("https://www.example.com:1897/services/myservice");
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
con.setDoOutput(true);
con.setDoInput(true);
OutputStream os = con.getOutputStream();
m.marshal(auth, os);
m.marshal(auth, System.out);
os.flush();
con.getResponseCode();
答案 0 :(得分:1)
服务器可能正在使用缺少适当扩展名的证书。您可以禁用主机名验证(这会产生安全问题),也可以在服务器上安装适当的证书(如果不是您的服务器,则可能很难)。
更具体地说,我猜服务器证书包含主题备用名称扩展名,但该扩展名不包含服务器的主机名,或者没有SAN扩展名和主题的公共名称属性名称与服务器不匹配。在任何一种情况下,解决方案都是在SAN扩展中获取具有正确服务器主机名的证书。