我有一个SQL数据库,它存储我的WCF服务和其他服务的客户端证书。 (X509等)。我想使用此商店(而不是“我的”)来检索此证书(而不是在web.config中声明它),然后将其用于WCF。
我试图在这个网站和谷歌上搜索,但似乎没有多大帮助。
目前我在做
var targetEndpoint = new EndpointAddress(targetLogicalAddress, targetIdentity);
MyTransportPortTypesClient proxy = new MyTransportPortTypesClient("WebConfigSection", targetEndpoint);
理想情况下,我想摆脱“WebConfigSection”,而是传递某种具有certifictate签名的WCF对象。
有谁知道如何实现这个目标?
我终于解决了这个问题,这就是我做到的。 (我将分享我的经验,以便每个人都可以使用它)这是没有使用任何机器CertificateStore。它纯粹是从数据库到客户端代理。
我创建了X509Certificate2对象并分配了物理文件(在byte []中)。如果密码受到保护,您也可以输入密码。
然后我将证书分配给我的代理客户端。 类似的东西:
proxy.ClientCredentials.ClientCertificate = __MyCertificate
现在我已经在我的app.config中实现了我的clientproxy。就是这样。所有这些属性都将出现在您的代理对象中。
希望这有帮助。
答案 0 :(得分:1)
AFAIK至少非常困难,如果不是不可能的话。 WCF使用SChannel SSPI provider进行身份验证,此SSPI提供程序仅从SChannel CSP provider加载证书。为了使用来自数据库的证书,必须首先将证书加载到PROV_RSA_SCHANNEL CSP密钥库中,然后将此密钥库的证书上下文传递给AcquireCredentialsHandle
。例如,这就是database mirroring is able to authenticate using a certificate stored in the database的方式。虽然也可以在托管代码中执行所有这些步骤,但我不确定是否可以将它们插入到WCF中:我期待它是,但可能不适合胆小的人。< / p>