我有一个MOSS 2007服务器场,需要客户端证书才能访问。我编写了几种使用内置SharePoint服务从站点检索数据的方法。但是,在我的本地测试环境之外,一切都需要客户端证书来访问服务。
我检索证书的方法是:
private static X509Certificate2 GetCertCreds()
{
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
try
{
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySubjectKeyIdentifier, "SiteIdentityCertificateSerialNumber", true);
Assert.IsNotNull(certs);
return certs[0];
}
finally
{
store.Close();
}
}
然后在使用中我必须有类似的东西:
using (ListsServiceProxy.Lists service = new ListsServiceProxy.Lists())
{
service.Crendentials = GetCredentials();
XmlNode idResultsNode = service.GetListItems(documentLibraryName, null, queryNode, viewNode, "1", optionNode, null);
}
由于类型不匹配,这不是编译。我是以错误的方式来做这件事的吗?如果没有,是否有办法将证书用作服务凭证?我想最终我要做的是将X509Certificate2转换为ICredentials。任何帮助或建议将不胜感激。
答案 0 :(得分:0)
事实证明我错了。为了正确地做到这一点,我更换了:
service.Credentials = GetCertCreds()
与
service.ClientCertificates.Add(GetCretCreds());
只需将证书添加到服务的客户端证书集合中即可。