我有一个SQL数据库,用于存储WCF服务和其他服务的客户端证书。(X509等)。我想使用此存储(而不是“我的”)来检索此证书(而不是在web.config中声明),然后将其用于WCF。
我试图在此网站和Google上进行搜索,但似乎没有太大帮助。
目前我在做
var targetEndpoint = new EndpointAddress(targetLogicalAddress, targetIdentity); MyTransportPortTypesClient proxy = new MyTransportPortTypesClient("WebConfigSection", targetEndpoint);
因此,理想情况下,我想摆脱“ WebConfigSection”,而传递某种经过证书签名的WCF对象。
有人知道如何实现这一目标吗?
我终于解决了这个,这就是我的做法。(我将分享我的经验,这样每个人都可以使用它)这无需使用任何计算机CertificateStore。它纯粹是从数据库到客户端代理。
我已经创建了X509Certificate2对象并分配了物理文件(在byte []中)。如果密码受密码保护,您也可以输入密码。
然后,我已将证书分配给我的代理客户端。就像是 :
proxy.ClientCredentials.ClientCertificate = __MyCertificate
现在,当我在app.config中被互联网化时,我已经操纵了clientproxy。就是这样。所有这些属性将在您的代理对象中。
希望这可以帮助。
AFAIK这至少是非常困难的,如果没有失败的话是不可能的。WCF使用SChannel SSPI提供程序进行身份验证,并且此SSPI提供程序将仅从SChannel CSP提供程序加载证书。为了使用数据库中的证书,必须先将证书加载到PROV_RSA_SCHANNEL CSP密钥库中,然后将该密钥库的证书上下文传递给AcquireCredentialsHandle。例如,这就是数据库镜像使用存储在数据库中的证书进行身份验证的方式。尽管也可以在托管代码中执行所有这些步骤,但是我不确定是否可以将它们插入WCF:我 希望 是这样,但可能并非出于胆小。
AcquireCredentialsHandle