2012-03-23 69 views
0

如何使用c#和SharePoint 2010 apis将证书导入到SharePoint 2010(将用于可信身份提供程序的证书,它是链式证书)?来自Visual Studio的SPTrustedRootAuthority(C#)

PowerShell有新的SPTrustedRootAuthority,但我不能使用PowerShell。 我使用dll上的反射,并且New-SPTrustedRootAuthority使用的是SPTrustedRootAuthorityManager类,它是内部的。

任何想法?

回答

1

这会将指定的X509证书添加到SharePoint 2010的“可信关系”存储中。

使用

var cert = new X509Certificate2(@"C:\my_cert.cer"); 

AddTrustedRootAuthority("My Cert", cert); 

的Util

public static void AddTrustedRootAuthority(string name, X509Certificate2 certificate) 
{ 
    Type SPTrustedRootAuthorityManagerType = Type.GetType("Microsoft.SharePoint.Administration.SPTrustedRootAuthorityManager, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c", true); 
    Type SPTrustedRootAuthorityType = Type.GetType("Microsoft.SharePoint.Administration.SPTrustedRootAuthority, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c", true); 

    object manager = SPTrustedRootAuthorityManagerType.GetProperty("LocalOrThrow", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null, null); 

    object authority = Activator.CreateInstance(SPTrustedRootAuthorityType, BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { name, manager, certificate }, null); 

    SPTrustedRootAuthorityType.GetMethod("Update", Type.EmptyTypes).Invoke(authority, null); 
}