1

SSL について別の質問があるかもしれません。

Smart Client があり、ClickOnce を使用して展開しています。このスマート クライアント アプリケーションでは、HTTPS Web サービスを呼び出します。この HTTPS Web サービスへのアクセスを許可するには、信頼されたルート証明機関をインストールする必要があります。

つまり、クライアント マシンで ClickOnce を実行する以外は何もしたくないということです = クライアント マシンに証明書を手動でインストールする必要はありません (またはではありません)が、Smart Client の前にインストールしたいと考えています。パッケージに含めて、最初にインストールします。

私の問題は:

インターネットで読んだように、クライアント マシンに管理者権限がなければ「信頼されたルート証明機関」をインストールする方法はありません。

それは正しいですか?

それが正しければ、この目標を達成するための別の解決策があると思いますか、それとも単に不可能ですか?

事前にありがとうございます。

4

2 に答える 2

1

正しいですか?

はい、あなたが「それは正しいですか?」という意味だと仮定します。管理者権限がないと、証明書の概念の目的全体が損なわれるため、クライアントマシンに証明書をインストールすることはできません。信頼されていない証明書は、ユーザーからの明示的なアクションがなければ、魔法のように信頼されることはできません。

信頼できるルート証明機関(Thawte、...)にすでに存在するルート証明機関の1つからCAを取得した場合、それは機能するはずです。

I'm assuming by "CA" you actually mean "certificate." CA stands for Certificate Authority. Thawte, Verisign, etc. ARE Certificate Authorities. You obtain certificates from Certificate Authorities. And the answer is yes, that will work because (you said it) they are already trusted by virtually everyone in the world.

于 2009-05-21T13:19:44.583 に答える
0

これがうまくいくとは 100% ではありませんが、https を使用して Web サービスを介して通信する単体テストでは (開発マシンには 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 で再確認すると、むかしむかし、このコードをここから直接取得したことがわかりました

ゴッドスピード!

于 2009-06-13T20:27:59.307 に答える