1

我可能还有另一个关于 SSL 的问题。

我有一个智能客户端,我使用 ClickOnce 部署它。在这个 Smart Client 应用程序中,我调用了 HTTPS Web 服务。我需要安装受信任的根证书颁发机构才能访问此 HTTPS Web 服务。

假设我想完全保留它“ClickOnce”,这意味着我不想在客户端机器上做任何事情,除了运行 ClickOnce = 我不想在客户端机器上手动安装证书(或不是),但我想在 Smart Client 之前安装它。我会将它包含在包中,并且将是第一个要安装的东西。

我的问题是:

正如我在互联网上阅读的那样,如果没有客户端计算机上的管理员权限,我就无法安装“受信任的根证书颁发机构”

这样对吗?

如果它是正确的,您是否看到了实现此目标的另一种解决方案,或者这是不可能的?

提前谢谢你。

4

2 回答 2

1

这样对吗?

是的,假设你的意思是“这对吗?” 您不能在没有管理员权限的客户端计算机上安装证书,因为这会破坏证书概念的整个目的。如果没有用户的明确操作,不受信任的证书不能神奇地变得受信任。

我想,如果我从已经在受信任的根证书颁发机构(Thawte,...)中的某个根证书颁发机构获得 CA,它应该可以工作吗?

我假设“CA”实际上是指“证书”。CA 代表证书颁发机构。Thawte、Verisign 等是证书颁发机构。您从证书颁发机构获得证书。答案是肯定的,这会奏效,因为(你说过)他们已经受到世界上几乎每个人的信任。

于 2009-05-21T13:19:44.583 回答
0

我不是 100% 这对你有用,但是对于我们通过我们的 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

神速!

于 2009-06-13T20:27:59.307 回答