我正在努力尝试通过salesforce.com的Apache反向代理获取SSL消息。 当他们试图向我们发送消息时,我得到了403(禁止)的错误。 我已经validation代理正在通过Web浏览器从后端Web服务请求WSDL并且没有SSLauthentication,它可以从IE / FireFox /等工作。 如果我完全closuresSSLRequire,SFDC不会报告错误,并删除该消息。 不幸的是,没有消息发送到我的Apache服务器。 我没有日志,没有消息。
我相信我要使用SSLRequire指令来确定SSL消息的发件人是谁。
SSLRequire(%{SSL_CLIENT_S_DN_CN} eq“proxy.salesforce.com”)
Salesforce.com为我提供了公钥,因为CN实际上是proxy.salesforce.com:
证书:
Data: Version: 3 (0x2) Serial Number: 0c:9e:22:84:5f:b8:55:8c:cb:c5:bf:aa:01:2a:7b:23 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=Terms of use at https://www.verisign.com/rpa (c)10, CN=VeriSign Class 3 International Server CA - G3 Validity Not Before: Dec 7 00:00:00 2011 GMT Not After : Dec 7 23:59:59 2013 GMT Subject: C=US, ST=California, L=San Francisco, O=Salesforce.com, Inc., OU=Application, CN=proxy.salesforce.com Subject Public Key Info:
我的SSL请求日志显示:
[11 / Jun / 2013:07:50:28 -0400] 96.43.148.8 – TLSv1 RC4-MD5“POST HTTP / 1.1”416
我的错误日志:96.43.148.8 – – [11 / Jun / 2013:07:50:28 -0400]“POST HTTP / 1.1”403 416“ – ”“Jakarta Commons-HttpClient / 3.1”
和我的访问日志显示:
[Tue Jun 11 07:50:28 2013] [info] Access to /opt/apache/htdocs/dev denied for 96.43.148.8 (requirement expression not fulfilled) [Tue Jun 11 07:50:28 2013] [info] Failed expression: (%{SSL_CLIENT_S_DN_CN} eq "proxy.salesforce.com") [Tue Jun 11 07:50:28 2013] [error] [client 96.43.148.8] access to /opt/apache/htdocs/dev failed, reason: SSL requirement expression not fulfilled (see SSL logfile for more details)
SFDC现在唯一能告诉我的是(403)禁止
我的configuration文件:
<VirtualHost *:8010> # Set up logging LogLevel info ErrorLog veri/sfdc.error.log Customlog veri/sfdc.log combined CustomLog veri/ssl_request_log "%t %h %{SSL_CLIENT_S_DN_CN}c %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" # misc directives ServerSignature on # Enable SSL on front end SSLEngine On SSLCertificateFile veri/server.crt SSLCertificateKeyFile veri/server.key SSLCertificateChainFile veri/intermediate.crt SSLProtocol -ALL +SSLv3 +TLSv1 SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-EXP SSLOptions -FakeBasicAuth +StdEnvVars <location /> Order deny,allow deny from all allow from 96.43.148.8 SSLRequire (%{SSL_CLIENT_S_DN_CN} eq "proxy.salesforce.com") </location> SetEnv USING_SSL_SERVER 1 ProxyRequests off ProxyVia On ProxyPreserveHost On SSLProxyEngine off ProxyPass <SNIPPED> ProxyPassReverse <SNIPPED> </VirtualHost>
它看起来像您收到的客户端证书没有预期的属性。 具体来说,它看起来像是标准名称字段不符合预期的“proxy.salesforce.com”
在你的情况下,我会在反向代理的外部接口上设置一个tcpdump,等待来自96.43.148.8的连接。 然后,我会将这个跟踪的结果提供给wireshark,以便parsingSSL握手,并允许您获取用于SSL客户端身份validation的证书的subject.cn。
这应该给你一个很好的指示什么是失败的。
SSL身份validation需要整个 CA Chain,包括根CA位于CA文件或CApath中。 我所做的假设是,OpenSSL证书商店中的根CA是足够的 – 事实并非如此。
添加使用的verisign根CA允许validation证书
<Location /> SSLVerifyClient optional SSLVerifyDepth 10 SSLRequire (%{SSL_CLIENT_S_DN_CN} eq "<Partner CN name>") SSLCACertificatePath /opt/apache/veri/CA </Location>
如果使用SSLCACertificatePath指令,请不要忘记重新提供/ opt / apache / veri / CApath。