1

我有一个 BITS 的 IIS 扩展,在服务器 (Win2008) 上启用了上传,并且在客户端计算机 (Win8.1) 上作为 Windows 服务运行的 C# .NET4 客户端

没有证书身份验证的 BITS 上传工作正常。

我生成了一个自签名根证书,将其添加到两台机器上的 TrustedCA 存储中,生成子客户端和服务器证书,将它们添加到各自的存储中。两者都在 MMC 控制台中显示为有效且受信任。

但是,当我尝试使用客户端证书身份验证(在 IIS 中设置“需要客户端证书”并将证书添加到客户端上的 BITS 作业)时,IIS 似乎没有收到客户端证书。

我用来在客户端设置证书的代码是:

var httpOptions = (IBackgroundCopyJobHttpOptions) job2;
httpOptions.SetClientCertificateByName(certificate.certLocation, certificate.certStoreName, certificate.certSubjectName);

证书位置是

BG_CERT_STORE_LOCATION.BG_CERT_STORE_LOCATION_LOCAL_MACHINE

因为客户端证书已安装到 LocalMachine 中,并且服务作为 LocalSystem 运行。

此外,在我打电话后SetClientCertificateByName,我尝试将其取回:

string stName, stLocation;
var hash = new IntPtr();
httpOptions.GetClientCertificate(out loc, out stName, hash, out stLocation)

但它返回空值。

我试图通过以下方式检查证书是否存在:

var store = new X509Store(certificate.certStoreName, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates.Find(X509FindType.FindBySubjectName,   certificate.certSubjectName, true)

并且证书确实在那里。

我还尝试使用 WinHttpCertCfg.exe(没有错误,但没有任何改变)和 FindPrivateKey.exe(说“无法获取私钥文件名”)来授予对 LocalSystem 帐户的证书私钥的访问权限。

我对这个没有想法。任何见解将不胜感激。

4

0 回答 0