gpt4 book ai didi

Java Soap 通过 https 连接

转载 作者:行者123 更新时间:2023-12-01 15:34:07 26 4
gpt4 key购买 nike

我正在尝试连接到 https url - https://rtpubcommission.api.cj.com/wsdl/version2/realtimeCommissionServiceV2.wsdl

但是获取错误(仅列出错误链,没有完整的堆栈跟踪):

com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: java.security.PrivilegedActionException: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Message send failed
Caused by: java.security.PrivilegedActionException: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Message send failed
Caused by: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: algorithm check failed: MD2withRSA is disabled
Caused by: java.security.cert.CertPathValidatorException: algorithm check failed: MD2withRSA is disabled

这是我的代码:

private void processCommonRequest(String url, HashMap<String, String> params) throws Exception {
URL endpoint = new URL(url);

//MessageDigest md = MessageDigest.getInstance("MD5");

//System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
//Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

// Create SOAP connection
SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance();
SOAPConnection connection = scf.createConnection();

// Create a message from the message factory.
MessageFactory mf = MessageFactory.newInstance();
SOAPMessage msg = mf.createMessage();

// Get the SOAP Part from the message
SOAPPart soapPart = msg.getSOAPPart();

// Get the SOAP Envelope from the SOAP Part
SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration("SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/");
envelope.addNamespaceDeclaration("xsd", "http://www.w3.org/1999/XMLSchema");
envelope.addNamespaceDeclaration("xsi", "http://www.w3.org/1999/XMLSchema-instance-instance");
envelope.addNamespaceDeclaration("tns", "http://api.cj.com");
envelope.setEncodingStyle("http://schemas.xmlsoap.org/soap/encoding/");
// Remove empty header from the Envelope
envelope.getHeader().detachNode();

// Create a soap body from the Envelope.
SOAPBody body = envelope.getBody();
body.addNamespaceDeclaration("soap-env", "http://schemas.xmlsoap.org/soap/encoding/");

// SOAPBodyElement item = body.addBodyElement(envelope.createName("GeScore") );
SOAPBodyElement item = body.addBodyElement(envelope.createName(
"GeScore", "soap-env", "http://schemas.xmlsoap.org/soap/encoding/"));

for (String keyMap : params.keySet()) {
addItem(envelope, keyMap, params.get(keyMap), item);
}

System.out.println("\nContent of the message: \n"); // FIXME
msg.writeTo(System.out);

// Send the SOAP message and get reply
System.err.println("\nSending message to URL: " + endpoint); // XXX
SOAPMessage reply = connection.call(msg, endpoint);

// ... nevermind what later ... .call function throws error ....

connection.close();
}

最佳答案

MD2 不再安全,因此 Sun 禁止在证书路径验证中使用它。在安全更新 6u17 的发行说明中,http://java.sun.com/javase/6/webnotes/6u17.html ,据说该漏洞已得到解决,“6861062:在证书链验证中禁用MD2”。

您可以在旧版本的 JRE(6u17 之前)上运行代码,也可以尝试使用最新版本,因为有一些报告表明它可能有效(https://forums.oracle.com/forums/thread.jspa?线程 ID=1237743)。

或者,您可以尝试使用自定义 TrustManager,但如果安全性对您很重要,则不建议这样做。

关于Java Soap 通过 https 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9184657/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com