3

秘密鍵の読み込みに問題があります。次のコマンドを使用して証明書を作成しました。

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

出力の GIST を作成しました: https://gist.github.com/anonymous/5592135

    static void Main(string[] args)
    {
        string location = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
        string certLocation = location + "\\assets\\certificate.crt";
        string privateKeyLocation = location + "\\assets\\privateKey.key";
        string xmlDocLocation = location + "\\assets\\sample.xml";

        XmlDocument Doc = new XmlDocument();
        Doc.Load(xmlDocLocation);

        // read up the certificate
        X509Certificate2 cert = new X509Certificate2(certLocation);
        X509Certificate2 privateKey = new X509Certificate2(privateKeyLocation);

    }

証明書は正常に読み込まれますが、秘密鍵を読み込むことができません。「要求されたオブジェクトが見つかりません」というメッセージが表示されます。

ストアを使用する代わりにファイルから秘密鍵と証明書をロードしたいのですが、可能ですか? 証明書と秘密鍵を間違って生成しましたか? 最終的に、公開鍵を xml ドキュメントに含めたいと思います。受信者は xml データを解析し、秘密鍵と公開鍵が一致することを検証します。

4

1 に答える 1

1

証明書ストアの使用を避けたい場合は、CRT とキーを PFX ファイルに結合することをお勧めします。これを行う方法について説明する1つのリンクがあります(または単に「openssl create pfx」をグーグルで検索してください)。

https://www.globalsign.com/support/import/apache.php

コードでは、X509Certificate2 オブジェクト (証明書オブジェクトなど) に公開鍵と秘密鍵の両方が含まれることに注意してください。したがって、秘密鍵用に別のオブジェクトは必要ありません。PFX ファイルを作成すると、パスワードの入力を求められます。このパスワードは、PFX の秘密キー部分を暗号化するために使用されます。X509Certificate2 オブジェクトを作成するときは、PFX ファイルの場所とパスワードを指定します。コンストラクターは次のとおりです。

http://msdn.microsoft.com/en-us/library/ms148420.aspx

あなたの最終的な目標が何であるかはわかりません。XML ファイルが実際にサーバーから取得され、変更されていないことをクライアントに確認させたい場合は、デジタル署名の使用を検討する必要があります。簡単に言えば、送信者は秘密鍵を使用して XML ファイルのハッシュに署名し、受信者は送信者の公開鍵を使用してそれを検証します。

于 2013-05-16T14:45:40.563 に答える