13

証明書と秘密鍵の曲がりくねった迷路に迷いました。

私はC#でサーバーを書いています。SSL接続を受け入れてほしい。テストの目的で、「localhost」の証明書を生成し、その証明書をサーバーに使用したいと思います。理想的には、証明書ストアを汚染したくないので、C#コードが証明書を提供するためにロードできるディスク上の1つまたは複数のファイルが必要です。

私が試したすべてのこと(Web検索で提案されたクックブックアプローチを使用)では、「パッケージに提供された資格情報が認識されませんでした」または「サーバーモードSSLは関連付けられた秘密鍵を持つ証明書を使用する必要があります」のいずれかが表示されます。

証明書と秘密鍵を生成し、その後、それらをマシンの証明書ストアにロードせずにX509Certificateオブジェクトにロードする方法はありますか?

4

6 に答える 6

17

最後に、以下を実行してserver.pfxファイルを作成しました。

makecert.exe -r -pe -n "CN=localhost" -sky exchange -sv server.pvk server.cer
pvk2pfx -pvk server.pvk -spc server.cer -pfx server.pfx

次に、次のコードをロードしました。

certificate = new X509Certificate2("server.pfx", "password");

(私は実際にそのようなパスワードをハードコーディングしませんでした:-)

秘訣は、pfxファイルが必要であり、X509CertificateではなくX509Certificate2クラスを使用してロードする必要があることを知ることでした。

于 2013-01-08T19:30:10.287 に答える
8

NikiLocheメソッドが機能します。

を取得The specified network password is not correct.した場合は、C#でパスワードなしで試してみてください。入力パスワードが何であったかは関係ありませんmakecert

certificate = new X509Certificate2("Server.pfx", "");

ただし、パスワードを使用する場合(理由があり、そこにあります:))、pvk2pfx.exeコマンドを次のように変更してみてください。

pvk2pfx.exe "-pi password -pvk Server.pvk -spc Server.cer -pfx Server.pfx

C#に次のように入力します。

証明書=新しいX509Certificate2( "Server.pfx"、 "パスワード");

パスワードは、cerファイルの作成時と同じである必要があります。

それは私にとってトリックでした。それが誰かを助けることを願っています。

于 2013-11-01T00:49:22.337 に答える
1

独自のCAとして機能し、証明書を生成できるようにするツールがいくつかあります。XCAはその1つです。たとえば、OpenSSLコマンドを使用する方法もいくつかあります。

自己署名証明書のみを生成するのが最も簡単なオプションのように思えるかもしれませんが、テストCA(および別のサーバー証明書)を使用する価値があるかもしれません。これにより、テストをより現実的にするために必要な場合に、テストCAをブラウザのストアにインポートできます。適切なツール(XCAなど)を使用すれば、それほど難しくはありません。

サーバー証明書とその秘密鍵を生成したら、それをPKCS#12ファイル(.p12 / .pfx)に変換します。

その後、を使用してロードできるようになりますX509Certificate2.import(...)(この回答の例を参照してください。)

于 2013-01-08T13:57:39.570 に答える
1

最近、TLSを使用してSMTPサーバーを開発しました。サーバーをWindowsサービスとしてWindowsServer2012ボックスにインストールする必要がありました。ドメインにLet'sEncryptSSL証明書(*ワイルドカード)を使用しました。「サーバー上」で開発しているときに、「new X509Certificate( "cert.pfx"、 "{password}")を使用してコードを機能させるには、管理者としてVisual Studioを実行する必要がありました。ただし、サービスとしてインストールすると、そのスキームは機能しませんでした。より簡単で安全な方法はX509Storeを使用することです。これが問題を解決したコードです...

private X509Certificate GetSslCertificate()
{
    X509Certificate cert = null;
    string certname = "*.mydomain.com";

    try
    {
        X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
        store.Open(OpenFlags.OpenExistingOnly);

        foreach (X509Certificate certificate in store.Certificates)
        {
            if (certificate.Subject.ToLower().Contains(certname))
            {
                cert = certificate;
                break;
            }
        }
    }
    catch (Exception) { /* Handle Exception */ }
    return cert;
}

また、StoreLocationとして「LocalMachine」を使用したことにも注意してください。SSL証明書をインストールした場所である場合は、CurrentUserに変更する必要があります。

于 2020-12-03T18:08:53.383 に答える
0

IISを使用している場合は、IISマネージャーを使用してこれを実行できます。詳細は次のとおりです。

http://blogs.msdn.com/b/ericnel/archive/2009/09/22/using-iis-to-generate-a-x509-certificate-for-use-with-the-windows-azure-service- management-api-step-by-step.aspx

于 2014-06-18T16:20:28.137 に答える
0

(ユーザーストアではなく)マシンストアからマシン証明書をインポートするときにも同じ問題が発生しました。マシンストア証明書の秘密鍵にアクセスするには管理者権限が必要なため、管理者としてVisualStudioを実行することで解決しました。

于 2014-09-09T22:44:18.620 に答える