我有一个关于SSL的问题。
我有一个智能客户端,我使用ClickOnce进行部署。在此Smart Client应用程序中,我调用HTTPS Web服务。我需要安装受信任的根证书颁发机构才能访问此HTTPS Web服务。
假设我想完全保留它“ClickOnce”,这意味着我不想在客户端计算机上做任何事情,除了运行ClickOnce =我不想在客户端计算机上安装证书手动(或不),但我想在Smart Client之前安装它。我会把它包含在包装中,并且是第一件要安装的东西。
我的问题是:
当我在互联网上阅读时,如果没有客户端计算机上的管理员权限,我就无法安装“受信任的根证书颁发机构”
是吗?
如果它是对的,你是否看到另一种解决方案来实现这一目标,或者这是不可能的?
请您提前。
答案 0 :(得分:1)
是不是?
是的,假设你的意思是“这是正确的吗?”您无法在没有管理员权限的客户端计算机上安装证书,因为这会破坏证书概念的整个目的。如果没有用户的明确行动,不受信任的证书就不会神奇地变得可信。
我想,如果我从其中一个获得CA. 根证书颁发机构 已经在受信任的根目录中 认证机构(Thawte,...) ,它应该工作吗?
我假设“CA”你的意思是“证书”。 CA代表证书颁发机构。 Thawte,Verisign等是证书颁发机构。您从证书颁发机构获取证书。答案是肯定的,这将是有效的,因为(你说过)他们已经被世界上几乎所有人所信任。
答案 1 :(得分:0)
我不是百分之百,这对你有用,但对于我们通过我们的web服务与https进行通信的单元测试(在开发机器上没有由CA颁发的证书),我们这样做:
在客户端中,我们称之为静态方法: (我们正在使用WSE3的Web服务,不确定这是否依赖于此)
private static void DisableCertificateChainCheckingForTestCertificateCompatibility()
{
ServicePointManager.ServerCertificateValidationCallback =
new RemoteCertificateValidationCallback(
ValidateServerCertificate);
}
internal static bool ValidateServerCertificate(
object sender,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
{
return true;
}
//Allow untrusted machines
if (sslPolicyErrors == SslPolicyErrors.RemoteCertificateChainErrors)
{
return true;
}
// Do not allow this client to communicate with unauthenticated servers.
return false;
}
使用MSDN进行仔细检查我发现我曾经从这里直接获取此代码: http://msdn.microsoft.com/en-us/library/system.net.security.remotecertificatevalidationcallback.aspx
一帆风顺!