2012-06-04 4 views
0

Я пытаюсь сделать следующее;Salesforce webservice call

От salesforce.com Я называю http get или post и отправляю объект json, используя класс httpRequest. но я получаю следующее исключение (это протокол HTTPS):

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

Я настроил этот веб-сайт в удаленном хосте уже. Кто-нибудь знает, что здесь может быть неправильно?

ответ

1

Вам не хватает имени req.setClientCertificateName?

У меня есть код APEX, где Salesforce обращается к веб-службе на моем сайте. Я защитил его с помощью SSL на стороне клиента. Мой веб-сайт, хост, авторизует сертификат клиента от Salesforce.com (против традиционного веб-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> 
0

В моем другом ответе, который я думал, о сертификате клиента Salesforce, потому что я помню, что изначально были изъяты головные боли, но, возможно, ошибка связана с сертификатом вашего веб-сервера. Это может быть простая проблема с совпадением имен. Например, сертификат, предоставленный вашему серверу Salesforce, был выдан на сайт a.company.com, но вы пытаетесь использовать его на сайте b.company.com. Это вызывает очень похожее сообщение об ошибке java, о котором говорилось о here и here. Предоставляет ли ваш браузер какие-либо ошибки при попытке вашего сервиса через SSL?

Если вы считаете, что Salesforce не проверяет сертификат вашего веб-сервера, вы можете попробовать некоторые из предложенных трюков over here for a similar javax.net.ssl.SSLPeerUnverifiedException error. Они даже указывают на список центров сертификации, которым доверяет Salesforce.