既存のアプリケーションをMono(v2.10.2)に移行しようとしています。Monoを使用したWCF証明書セキュリティ
したがって、私はBasicHttpBindingとメッセージセキュリティでテストWCFサービスを作成しました。クライアントは.NETで完全に動作しますが、Monoで実行すると失敗します。
次のようにクライアントの工場がインスタンス化される:モノラル
//var certificate = CertificateUtil.GetCertificate(StoreLocation.LocalMachine,
// StoreName.My, X509FindType.FindBySubjectDistinguishedName, CertName, true);
var certificate = new X509Certificate2("certificate.pfx", "password");
var binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.Message;
binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;
var epa = new EndpointAddress(
new Uri("http://localhost:53076/Service1.svc"),
new X509CertificateEndpointIdentity(certificate));
var factory = new ChannelFactory<IService1>(binding, epa);
factory.Credentials.ServiceCertificate.DefaultCertificate = certificate;
factory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
factory.Credentials.ServiceCertificate.Authentication.RevocationMode = X509RevocationMode.NoCheck;
factory.Credentials.ClientCertificate.Certificate = certificate;
var client = factory.CreateChannel();
アプリケーションが例外をスローCreateChannel以内に失敗します。
のSystem.InvalidOperationException:バインディングは、チャネルタイプのいずれかをサポートしていません。契約「IService1」に許されるものです。
私はMonoソースコードにデバッグし、問題がAsymmetricSecurityBindingElement.InitiatorTokenParameter == nullであることを確認しました。
私はMonoを初めて使っています。多分、このトピックをカバーするドキュメンテーション/チュートリアルを教えてくれるかもしれません。
UPDATE:証明書オブジェクトは、現在の秘密鍵を持っているkonrad.kruczynskiの助けを借りて
。例外は同じです。したがって、これは証明書ストアの問題ではありません。
誰かが、証明書ストアで証明書を検索するよりも、証明書を読む方がいいかもしれません。 pfxファイルからそれらを読み取ることは、私の目的のために完全であるでしょう。 –
最新の投稿をご覧ください。 –
私はこれをバグと見なします。 bugzillaに追加する価値があり、時々修正されることがあります。 –