2013-04-12 49 views
6

我正在評估用於使用webservices的savon ...但我沒有找到任何信息,如果我可以使用SSL客戶端證書對提供SOAP Web服務的服務器進行身份驗證。我閱讀了文檔,但沒有發現任何關於它的信息。SAVON是否支持客戶端證書身份驗證

有誰知道SAVON是否支持客戶端證書認證?

問候 FAK

回答

10

薩翁的最新的穩定版本(2.2.0在這一刻)支持通過全局選項SSL客戶端證書。請參閱the documentation中的SSL部分。

下面是一些示例代碼,假設HttpClient的使用與httpi:

savonConfig = { 
    :namespace => "http://...com", 
    :endpoint => 'https://...:557/x/b/c', 
    #:wsdl => 'https://...:557/x/b/c?wsdl', 
    :log_level => :debug, 
    :log => true, 
    :ssl_verify_mode => :none, 
    :ssl_cert_file => 'publicCert.pem', 
    :ssl_cert_key_file => 'privateKey.pem', 
    :ssl_cert_key_password => '1234', 
    :open_timeout => 600, 
    :read_timeout => 600 
} 

client = Savon.client savonConfig 

soapBody = { 
... 
} 


calcResponse = client.call(:charge, :message => soapBody) 

如果你有一個PFX證書/密鑰文件,你可以直接使用它有問題 - 所以你可能需要將其分離出來到單獨的文件 - 看到這個頁面的信息:Extract public/private key from PKCS12 file for later use in SSH-PK-Authentification

希望幫助!
丹尼爾

+0

非常感謝,應該已經意識到,這些選項都對客戶端證書(假設他們不是'客戶'沒有提到)。我認爲你需要使用httpclient進行工作...... –

+1

Savon版本2中的HTTP選項用於創建[HTTPI :: Request](http://httpirb.com/#requests)。所以這取決於適配器是否支持。 – rubiii

1

我們正在試圖讓薩翁客戶端SSL客戶端身份驗證,但在同一時間旁路主機驗證工作問題....

https://github.com/savonrb/savon/issues/679

client = Savon.client(log_level: :debug, 
log: true, 
ssl_verify_mode: :none, 
ssl_cert_file: (Rails.root + 'signed.cer').to_s, 
ssl_cert_key_file: ('private.key').to_s, 
wsdl: "https://example.com/Service?wsdl", 
endpoint: "https://example.com/Service") 

失敗,就像 HTTPI GET請求到wir.dhswir.org(net_http) HTTPI :: SSLError:SSL_read:ssl握手失敗

no moe info ..

我們嘗試了savon 2.2.0,2.3.0和2.11.0。具有稍微變化的錯誤消息。

我們使用相同的PEM格式化密鑰和證書savon並使用unix WGET進行比較。如果我們不通過--no檢查證書WGET會失敗,但是如果我們補充說,它傳遞和可以做的SSL客戶端身份驗證並訪問

wget 'https://example.com/CDC/VaccinationService?wsdl' --certificate=example-int-wi-signed.cer --private-key=private.key -O- --no-check-certificate 
相關問題