Salesforce webservice调用

时间:2012-06-04 16:58:58

标签: salesforce apex-code

我正在尝试执行以下操作;

来自salesforce.com我使用httpRequest系统类调用http get或post并发布json对象。但我得到以下异常(它是https):

java.security.cert.CertificateException: No name matching issue mywebsite.com found

我已经在远程主机中配置了这个网站。有没有人知道这里有什么问题?

2 个答案:

答案 0 :(得分:1)

您是否错过了对req.setClientCertificateName的调用?

我有APEX代码,Salesforce呼叫我网站上的网络服务。我用客户端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>

答案 1 :(得分:0)

在我的另一个答案中,我正在考虑Salesforce客户端证书,因为我记得最初将其排序,但可能错误在于您的Web服务器证书。这可能是一个简单的名称匹配问题。例如,您的服务器提供给Salesforce的证书已发给a.company.com,但您尝试在b.company.com上使用它。这会产生一个非常相似的java错误消息,如herehere所述。当您通过SSL尝试服务时,您的浏览器是否会出现任何错误?

如果您认为Salesforce未验证您的网络服务器的证书,您可以尝试一些建议over here for a similar javax.net.ssl.SSLPeerUnverifiedException error的技巧。他们甚至指向Salesforce信任的CA列表。