我有一个JavaWeb服务客户端,它通过HTTPS使用web服务。
import javax.xml.ws.Service;
@WebServiceClient(name = "ISomeService", targetNamespace = "http://tempuri.org/", wsdlLocation = "...")
public class ISomeService
extends Service
{
public ISomeService() {
super(__getWsdlLocation(), ISOMESERVICE_QNAME);
}
当我连接到服务URL(https://AAA.BBB.CCC.DDD:9443/ISomeService
),我得到了异常java。安全cert.CertificateException:不存在主题备选名称
。
为了修复它,我首先运行了opensslsu客户端-showcerts-connectaaa。BBB。CCC。DDD:9443
CONNECTED(00000003)
---
Certificate chain
0 s:/CN=someSubdomain.someorganisation.com
i:/CN=someSubdomain.someorganisation.com
-----BEGIN CERTIFICATE-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=someSubdomain.someorganisation.com
issuer=/CN=someSubdomain.someorganisation.com
---
No client certificate CA names sent
---
SSL handshake has read 489 bytes and written 236 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-MD5
Server public key is 512 bit
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : RC4-MD5
Session-ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Session-ID-ctx:
Master-Key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Key-Arg : None
Start Time: 1382521838
Timeout : 300 (sec)
Verify return code: 21 (unable to verify the first certificate)
---
好了,现在我需要
提取证书的部分。txt
介于----开始证书---
和----结束证书---
,
这样做正确吗?
如果是这样,我如何才能使步骤1中的证书与基于IP的地址(
AAA.BBB.CCC.DDD
)一起工作?
更新1(23.10.2013 15:37 MSK):在对类似问题的回答中,我阅读了以下内容:
如果您无法控制该服务器,请使用其主机名(前提是现有证书中至少有一个CN与该主机名匹配)。
“用”到底是什么意思?
这是一个老问题,但我在从JDK1.8.0_144迁移到JDK1.8.0_191时遇到了同样的问题
我们在更改日志中发现了一个提示:
变更日志
我们添加了以下附加系统属性,这有助于解决此问题:
-Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true
我也有同样的问题,用这个代码解决了。我将此代码放在第一次调用Web服务之前。
javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
new javax.net.ssl.HostnameVerifier(){
public boolean verify(String hostname,
javax.net.ssl.SSLSession sslSession) {
return hostname.equals("localhost"); // or return true
}
});
它很简单,工作正常。
这是原始来源。
我通过使用此处介绍的方法禁用HTTPS检查修复了此问题:
我将以下代码放入ISomeService
类:
static {
disableSslVerification();
}
private static void disableSslVerification() {
try
{
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}
};
// Install the all-trusting trust manager
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
// Create all-trusting host name verifier
HostnameVerifier allHostsValid = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
// Install the all-trusting host verifier
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
}
因为我使用https://AAA. BBB. CCC. DDD: 9443/ISomeService
仅用于测试目的,所以它是一个足够好的解决方案,但在生产中不这样做。
请注意,您还可以为“一次一个连接”禁用SSL,例如:
// don't call disableSslVerification but use its internal code:
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
if (conn instanceof HttpsURLConnection) {
HttpsURLConnection httpsConn = (HttpsURLConnection) conn;
httpsConn.setHostnameVerifier(allHostsValid);
httpsConn.setSSLSocketFactory(sc.getSocketFactory());
}
问题内容: 我有一个Java Web服务客户端,该客户端通过HTTPS使用Web服务。 当我连接到服务URL 要解决此问题,我首先运行: AFAIK,现在我需要 提取的部分certs.txt之间-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----, 对其进行修改,以使证书名称等于AAA.BBB.CCC.DDD和 然后使用导入结果keytool
问题内容: 我正在使用version 。在此工具中,我发布了示例项目(即),并订阅了该项目以获取使用者密钥和机密。该工具还为我提供了可以正常运行的CURL命令。 下面的CURL命令运行正常。 现在我正在努力开发的利用代码将连接到无,即,方式看一下上面的curl命令。到目前为止,我已经开发了以下代码,但是运行时,我看到以下错误。 我面临的错误。 请建议我们如何以不安全的方式连接到SSL站点,就像cu
尝试了许多解决办法,但都无济于事 参考:在当前主题中找不到样式“协调器LayoutStyle” 但没有帮助 底部App Bar材质设计 应用程序条:底部材质设计
我已经通过终端在远程ubuntu机器中逐一使用以下命令生成了一个SSL自签名证书: T我已经将添加到本地计算机的cacerts中,使用命令提示符中的keytool作为admin。还将添加到“受信任的根证书颁发机构”中。他发出对Postman上的远程ubuntu机器服务器的HTTPS请求可以正常工作,但在IntelliJ上就不行了,我可以放心地得到:
。 不管我怎么努力都解决不了这个问题。我不知道为什么会这样,我真的厌倦了。我是初学者,这个问题让我发疯。我试着改变 -->到false 可能是执行方法上的问题,我不知道。可能是我的SDK版本有问题。我试过迁移到AndroidX,但没有成功。
我正在使用cogs来缩短和组织我的discord机器人。然而,在尝试“事件”cog时,我遇到了一个名称错误,即没有定义changePlaying,尽管它实际上是关于on_ready命令的 我忘了输入discord。ext并因此导入了该文件。B:我已经尝试过在changePlaying事件中更改可能状态列表的位置 嗯,我认为很明显预期的结果是什么,但要澄清机器人应该启动。它确实在线,并听取命令,但状