我正嘗試使用GlassFish 3.1.2.2 w/Metro JAX-WS連接到合作伙伴Web服務,並且出現HTTP錯誤403.7 - 禁止:需要SSL客戶端證書。GlassFish Metro客戶端證書出站web服務調用失敗
我已經導入我們的合作伙伴提供到GlassFish的密鑰存儲私鑰:
$ keytool -importkeystore -srckeystore XXX.pfx -srcstoretype pkcs12 -destkeystore keystore.jks
$ keytool -changealias -alias "le-75e085d7-0ceb-4734-ac52-0e64646924c8" -destalias "XXX" -keystore keystore.jks
$ keytool -keypasswd -alias XXX -keystore keystore.jks
我則在GlassFish的domain.xml中httpsOutboundKeyAlias屬性設置爲這個新的關鍵:
然後,當我做一個WS電話:
[#|2013-03-26T17:58:30.888-0700|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=137;_ThreadName=Thread-2;|#.: ---[HTTP request - https://XXX]---
Accept: text/xml, multipart/related
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://XXX"
User-Agent: Metro/2.2.0-1 (tags/2.2.0u1-7139; 2012-06-02T10:55:19+0000) JAXWS-RI/2.2.6-2 JAXWS/2.2 svn-revision#unknown
<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body>[...]</S:Body></S:Envelope>--------------------
|#]
[#|2013-03-26T17:58:31.847-0700|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=137;_ThreadName=Thread-2;|#.: ---[HTTP response - https://XXX - 403]---
null: HTTP/1.1 403 Forbidden
Content-Length: 1913
Content-Type: text/html
Date: Wed, 27 Mar 2013 00:58:31 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
[...]
<h2>HTTP Error 403.7 - Forbidden: SSL client certificate is required.<br>Internet Information Services (IIS)</h2>
我有這個配置工作o其他webservices,但不是由於某種原因這個...不知道IIS的行爲是不同的?
我似乎能夠精細連接使用curl呈現使用OpenSSL的來自合作伙伴的PFX文件轉換成一個PEM客戶端證書:
$ openssl pkcs12 -in XXX.pfx -out XXX.pem -nodes
$ curl -vk -E XXX.pem -H "Accept: text/xml, multipart/related" -H "Content-Type: text/xml; charset=utf-8" -H "SOAPAction: \"http://XXX\"" -d @req.xml https://XXX
所以不知道爲什麼的GlassFish /地鐵未在提交客戶端證書預計時尚。
關於我可能缺少什麼或如何排除故障的任何想法/建議?
我試着設置-Djavax.net.debug = ssl,但字節在GlassFish日誌中顯示爲單獨的日誌條目,所以它很難讀。 我也嘗試從容器外的獨立Java程序運行它,但後來碰到classpath issues。
謝謝
當跟蹤javax.net。debug = ssl我可以清楚地看到***證書請求,但Glassfish在***證書鏈之後不提供任何證書,因爲它與其他實例連接到其他服務器。 – TheArchitect 2013-03-28 01:36:57
我還驗證了客戶端證書鏈中的頂級CA與握手過程中服務器提供的證書頒發機構(1)之一相匹配,以及(2)GlassFish cacerts.jks信任庫中的證書,因此我不知道爲什麼GlassFish是不出示客戶證書... – TheArchitect 2013-03-28 01:38:43