3

我在一个 IIS6/ASP.NET 网站上工作,该网站必须以智能卡(特别是通用访问卡)的形式“要求客户端证书”。我需要创建一些服务来访问计时器上的各种 URL,以执行更新搜索索引、预热 Sharepoint 页面和其他任务等操作。

鉴于除非您拥有智能卡上的证书,否则该站点不允许访问,如何做到这一点?我试图加载证书(.cer)并像这样加载它:

HttpWebRequest request = (HttpWebRequest)
            WebRequest.Create("https://.../someURL.html");

const string certFilename = @"my.cer";
var cert = X509Certificate2.CreateFromCertFile(certFilename);
cert.Import(certFilename, "my pin", X509KeyStorageFlags.Exportable);
request.ClientCertificates.Add(cert);
HttpWebResponse response = (HttpWebResponse)
       request.GetResponse();

但我得到了 403 Forbidden。

4

4 回答 4

1

您可以从您的个人商店加载您的证书,如下所示:

 System.Security.Cryptography.X509Certificates.X509Certificate cert = FindCertByName(PART_AFTER_CN_IN_CERT_SUBJECT);
request.ClientCertificates.Add(cert);

..

        private System.Security.Cryptography.X509Certificates.X509Certificate FindCertByName(string simpleName)
        {
            X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
            store.Open(OpenFlags.ReadOnly);
            foreach (X509Certificate cert in store.Certificates)
            {
                if( cert.Subject.Contains("CN="+simpleName))
                {
                    return cert;
                }
            }

            string msg = "The '" + simpleName + "' security certificate is not installed on this system!";
            throw new ApplicationException(msg);
        }
于 2010-09-22T20:41:36.063 回答
1

这不是答案,但我没有足够的代表发表评论。.cer 不持有私钥,这只是公共证书,因此您不能使用它。您需要直接从智能卡加载私钥。我相信这可能涉及使用智能卡读卡器的 CSP 名称创建 CSP 参数,然后直接从卡中加载带有私钥的 x509 证书。据我所知,私钥不会自动安装到当前用户或当前机器的 MY 商店,因此您将无法从那里加载它。没有任何代码对不起。

于 2010-09-22T21:49:08.213 回答
0

您是否尝试将 X509 添加到凭据缓存中?例子:

X509Certificate cert = new X509Certificate("sslCert.txt"); X509CertificateCollection certColl = new X509CertificateCollection(); certColl.Add(cert); CredentialCache credCache = new CredentialCache(); credCache.Add(new Uri(string.Concat(outputReport.reportURI)), "Basic", new NetworkCredential(NexConfig.User, NexConfig.Pass)); wr.AllowAutoRedirect = false; wr.ClientCertificates = certColl; wr.Credentials = credCache; HttpWebResponse resp = (HttpWebResponse)wr.GetResponse();

于 2010-09-22T20:41:48.547 回答
0

如果您使用的是 SharePoint 2010:

  1. 转到 SharePoint 管理中心
  2. 转到应用程序管理 > 管理 Web 应用程序
  3. 突出显示您的前端 SharePoint 网站。
  4. 从顶部菜单中选择“扩展”。

它的作用是创建一个单独的 SharePoint 站点,该站点使用完全相同的配置和内容数据库,但您可以将它托管在其他地方,并单独保护它。这使您可以启动完全锁定的正常、安全的 SharePoint 实例,但同时在其他地方托管具有不同安全性的另一个版本,您可以授予其他访问权限,即需要运行索引或其他作业的服务.

于 2010-09-16T18:23:16.130 回答