1

PKCS#7/CMS 分離署名を生成する必要がありますが、その方法で簡単に実行できることがわかっています。

byte[] data = GetBytesFromFile(cheminFichier);

        X509Certificate2 certificate = null;
        X509Store my = new X509Store(StoreName.My,StoreLocation.CurrentUser);
        my.Open(OpenFlags.ReadOnly);
        X509Certificate2Collection certColl = X509Certificate2UI.SelectFromCollection(my.Certificates, "Test" , "Choose a certificate" , X509SelectionFlag.SingleSelection);
        certificate = certColl[0];

        if (certificate == null) throw new Exception("No certificates found.");

        //byte [] pfxFile = certificate.Export(X509ContentType.Pfx);
        //X509Certificate2 certPfx = new X509Certificate2(pfxFile);

        ContentInfo content = new ContentInfo(new Oid("1.2.840.113549.1.7.1"),data);
        SignedCms signedCms = new SignedCms(content, true);

        CmsSigner signer = new CmsSigner(certificate);
        signer.DigestAlgorithm = new Oid("SHA1"); // sha1

        // create the signature
        signedCms.ComputeSignature(signer);
        return signedCms.Encode();

しかし!このアプリケーションのユーザーは、強力な秘密キー保護を使用して証明書をインポートしました。私はそれに関するいくつかの情報を見つけました.一部の人々は、そのタイプのケースは.NETフレームワークでは機能しないと言い、それは私を驚かせました. 誰かが回避策を持っているか、これに対する解決策を持っているかどうか知りたいです。

基本的に、ユーザーがファイル名 (PDF または RTF) を指定してから、My ストアで証明書を検索し、それに関連付けられた秘密鍵を使用して署名を生成します。この時点で、アプリケーションがパスワードを受信しないように、ユーザーに秘密鍵のパスワードを入力するように求めます。

4

0 に答える 0