3

MasterCard Matchの認証を実装しようとしています。次のドキュメントの一部として、サンプルの秘密鍵があります。

https://developer.mastercard.com/portal/display/api/OAuth+Validation

そのページには、2つのバージョンのキーがあります。1つはbase64でエンコードされたテキストで、ページに表示されます。もう1つはダウンロード可能な.p12ファイルです。

このキーをインポートしてx509certificate2として使用するにはどうすればよいですか?

何をしようとしても、「要求されたオブジェクトが見つかりません。」というメッセージが表示されます。

.netソースで掘り下げてみましたが、インポートされたオブジェクトで行き止まりになります

[SecurityCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern uint _QueryCertFileType(string fileName);

私は次のことを試しましたが、すべて同じ前述のメッセージで失敗します

new X509Certificate2(@"c:\test\mc-openapi-csr.pem")
new X509Certificate2(@"c:\test\mc-openapi-csr.pem", "mcapi")
new X509Certificate2(@"c:\test\mc-openapi-csr.pem", "mckp")

そのため、テキストブロックを「copied.txt」にコピーして、そのファイルを使用してみました。また、バイトを読み込んで手動で渡し、使用してみました。

X509Certificate.CreateFromCertFile(fileName)

両方のファイルで。

何か案は?証明書は悪いですか?間違ったクラスを使用していますか?そのエラーメッセージはどういう意味ですか?

-更新--BadZombieの提案で、BouncyCastleを試しました。

    var pem = new Org.BouncyCastle.OpenSsl.PemReader(File.OpenText(fileName));
    RsaPrivateCrtKeyParameters rsaParameters = (RsaPrivateCrtKeyParameters)pem.ReadObject();
    using (var rsa = new RSACryptoServiceProvider())
    {
        rsa.ImportParameters(new RSAParameters
            {
                DP = rsaParameters.DP.ToByteArray(),
                DQ = rsaParameters.DQ.ToByteArray(),
                Exponent = rsaParameters.Exponent.ToByteArray(),
                InverseQ = rsaParameters.QInv.ToByteArray(),
                Modulus = rsaParameters.Modulus.ToByteArray(),
                P = rsaParameters.P.ToByteArray(),
                Q = rsaParameters.Q.ToByteArray(),
            });
    }

「ImportParameters」呼び出しで、「BadData」を取得します。私は何か間違ったことをしていますか?

4

2 に答える 2

2

正確には思い出せませんが、pemファイルは使えないと思います。弾力がある城のようなものが必要になります。

あまり覚えていませんが、PEMファイルをロードします。たまにそれは気に入らないでしょうが、それはややまれです。使用できるかどうかはわかりませんが、秘密鍵/公開鍵を正常に使用できたことは知っています。.NETsslライブラリで動作するものに変換する方法がわかりません。

ただし、弾力がある城ではなく.net実装を使用している場合は、.NET実装との互換性が高いものにpemに変換することをお勧めします。私はbouncycastleを使用しましたが、別のライブラリとのインターフェースを必要としない私のプロジェクトで機能しました。

using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.OpenSsl;
using System.IO;
using System.Security.Cryptography;

//elsewhere

        using (var reader = File.OpenText(fileName))
        {
            var pemReader = new PemReader(reader);
            var bouncyRsaParameters = (RsaPrivateCrtKeyParameters)pemReader.ReadObject();
            var rsaParameters = DotNetUtilities.ToRSAParameters(bouncyRsaParameters);
            this.PrivateKey = new RSACryptoServiceProvider();
            this.PrivateKey.ImportParameters(rsaParameters);
        }
于 2012-12-06T23:58:10.563 に答える
-2

絶対パスの代わりに相対パスを使用することはできますか?

ファイルをプロジェクトのルートに置き、パスなしでファイル名のみを使用してみてください。

于 2012-12-06T23:48:33.593 に答える