2013-04-12 18 views
6

Webサービスを消費するためにsavonを評価していますが、SOAPクライアント側証明書を使用してSOAP Webサービスを提供するサーバーに対して認証を行うことはできません。私はドキュメントを読んだが、それについて何も見つけられなかった。SAVONはクライアント側の証明書認証をサポートしています

SAVONがクライアント側の証明書認証をサポートしているかどうかは知りませんか?

よろしく ファック

答えて

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

多くのおかげで、これらのオプションは、クライアントcertsのためにしたことを認識している必要があります失敗します。 (彼らは言及されなかった 'クライアント'としてではなかったと仮定した)。私はあなたがこれも動作するために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で失敗しますwir.dhswir.org(net_http)へのGETリクエスト HTTPI :: SSLError:SSL_read:sslハンドシェイクエラー

no moe info ..

savon 2.2.0,2.3.0,2.11.0を試しました。エラーメッセージがわずかに変化します。

私たちは同じPEM形式のキーと証明書を使用して、savonとunix WGETを比較して比較しています。 Wgetは、我々は--no-チェック証明書を渡すいけない場合、我々はそれを渡すことを追加して、SSLクライアント認証を行い、アクセスを得ることができれば、しかし

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