我正在尝试执行以下操作;
从 salesforce.com 我调用 http get 或 post 并使用 httpRequest 系统类发布一个 json 对象。但我得到以下异常(它是https):
java.security.cert.CertificateException: No name matching issue mywebsite.com found
我已经在远程主机中配置了这个网站。有谁知道这里可能出了什么问题?
我正在尝试执行以下操作;
从 salesforce.com 我调用 http get 或 post 并使用 httpRequest 系统类发布一个 json 对象。但我得到以下异常(它是https):
java.security.cert.CertificateException: No name matching issue mywebsite.com found
我已经在远程主机中配置了这个网站。有谁知道这里可能出了什么问题?
您是否错过了对 req.setClientCertificateName 的调用?
我有 APEX 代码,Salesforce 在我的站点上调用 Web 服务。我用客户端 SSL 保护它。我的网站(主机)从 Salesforce.com 授权客户端证书(与浏览器客户端授权服务器证书的传统 Web SSL 相比)。您可以在 Salesforce Admin 中的证书和密钥管理下创建一个自签名证书,然后通过调用 req.setClientCertificateName 来引用它。这是我的生产组织中的一些代码:
HttpRequest req = new HttpRequest();
req.setMethod('POST');
req.setHeader('Host', 'www.mywebsite.com');
req.setEndpoint('https://www.mywebsite.com/post.asp');
try {
req.setClientCertificateName('Cert_For_MyWebSite');
} catch (System.CalloutException e) {
// The cert doesn't make it to the sandbox
}
req.setHeader('Connection', 'keep-alive');
req.setHeader('content-type', 'text/plain');
req.setHeader('Content-Length', body.length().format());
req.setBody(body);
Http http = new Http();
HttpResponse res = http.send(req);
System.debug(res.toString());
System.debug('STATUS:' + res.getStatus());
System.debug('STATUS_CODE:' + res.getStatusCode());
在服务器(IIS 7.5)上,我使用这个 web.config 启用了自签名证书:
<configuration>
<system.webServer>
<security>
<access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />
<authentication>
<iisClientCertificateMappingAuthentication enabled="true" oneToOneCertificateMappingsEnabled="true">
<oneToOneMappings>
<!-- production salesforce -->
<add enabled="true"
userName="salesforce"
password="[enc:AesProvider:aaa...aaa:enc]"
certificate="MIIEaaa...aaa=" />
</oneToOneMappings>
</iisClientCertificateMappingAuthentication>
</authentication>
</security>
</system.webServer>
</configuration>
在我的另一个答案中,我正在考虑 Salesforce 客户端证书,因为我记得最初整理它时很头疼,但可能错误在于您的 Web 服务器的证书。这可能是一个简单的名称匹配问题。例如,您的服务器提供给 Salesforce 的证书已颁发给 a.company.com,但您正尝试在 b.company.com 上使用它。这会产生与此处和此处讨论的非常相似的 java 错误消息。当您尝试通过 SSL 提供服务时,您的浏览器是否出现任何错误?
如果您认为 Salesforce 没有验证您的 Web 服务器的证书,您可以尝试这里建议的一些技巧来处理类似的 javax.net.ssl.SSLPeerUnverifiedException 错误。他们甚至指向 Salesforce 信任的 CA 列表。