csob / platebnibrana

Česká dokumentace ČSOB platební brány a jejího eAPI pro platby platebními kartami, Apple Pay, Google Pay, mallpay a platebními tlačítky ČSOB.
https://platbakartou.csob.cz/platebni-brana
GNU General Public License v3.0
6 stars 1 forks source link

DecodeRSAPrivateKey vyhazuje CryptographicException : 'Bad Data.' #49

Closed agisofts closed 4 months ago

agisofts commented 11 months ago

Dobrý den, .NET implementace CsobGatewayClientExample vyhazuje CryptographicException : 'Bad Data.'.

Crypto.cs -> DecodeRSAPrivateKey -> RSA.ImportParameters(RSAparams); System.Security.Cryptography.CryptographicException: 'Bad Data.'

Vygeneroval jsem 3 private keys, dva vyhazuji {"resultCode":110,"resultMessage":"Wrong signature"} a třetí crypto error. Da se s tim neco dělat?

Dekuji moc rsa_A4302pxyVp

DanielKubicek commented 11 months ago

Dobrý den, lze prosím uvést ID platební brány popřípadě čas ve kterém akce proběhly?

Děkuji

agisofts commented 11 months ago

Nevim jake je ID platebni brany. GatewayUrl = "https://iapi.iplatebnibrana.csob.cz/api/v1.9" MerchantId a private key je v priloze (.jpg premenovat na .key). MipsPublicKey = "./config/mips_iplatebnibrana.csob.cz.pub" z gitu.

Akce probehly 30.9.2023 priblizne o 20:55. Crypto error nema nic spolecne se sandboxem. Tam je problem bud ve vygenerovanem private key nebo v dekodovani private key (na strane merchanta). Zdrojaky jsou z gitu.

mjanek commented 11 months ago

Dobrý den, požadavek jsem předal odpovědnému kolegovi k prověření. M. Janek

jgrmelova commented 11 months ago

Dobrý den,

dle přílohy u prvního požadavku by se mělo jednat o anonymní Merchant ID A4302pxyVp. Pro toto Merchant ID vidím v databázi vygenerován klíč. K této platební bráně v databázi další pokusy o přegenerování klíčů nevidím. Domnívám se tedy, že z Vaší strany mohlo dojít k vytvoření dalších anonymních Merchant ID, které však neznáme.

U Merchant ID A4302pxyVp v logu nevidím ani žádný pokus o inicializaci transakce.

Pokud se u pokusu na inicializaci vrací Wrong signature - 110, je vhodné zkontrolovat zda:

Pokud by bylo potřebné další detailnější prověření, poprosím Vás o zaslání Merchant ID, celého požadavku společně s URL adresou a přesným časem pokusu na e-mail servis@monetplus.cz.


Jana Grmelová IT administrátor

agisofts commented 11 months ago

Dobry den, Vygeneroval jsem vice Merchant ID řeším problem s A4302pxyVp. V bug entry jsem jasně napsal, že neni problem v platební bráně, to znamená, že v logu nic není.

  1. Stáhnete si z github C# zdrojaky.
  2. V konfiguraci změnte merchant id na A4302pxyVp
  3. Stahnete si prilohu a změnye .jpg na .key
  4. Skuste zavolat knihovnu

Diky

nikisbeta commented 9 months ago

Hello, did you manage to solve it? I have the same error. After generating the production key, the signing algorithm gives me an error in the C# implementation.

The error is in the DecodeRSAPrivateKey(byte[] privkey) procedure, which throws a "Bad Data" exception. The program is thus terminated before any call to the endpoint.

image

nikisbeta commented 9 months ago

Hi, The problem was solved by using BouncyCastle in Crypto.cs

static RSACryptoServiceProvider LoadRSACryptoServiceProvider(string privateKeyFilePath)
{
    // Načtení obsahu souboru
    Console.WriteLine("Read key: " + privateKeyFilePath);

    string privateKeyText = File.ReadAllText(privateKeyFilePath);
    TextReader privateKeyTextReader = new StringReader(privateKeyText);
    PemReader pemReader = new PemReader(privateKeyTextReader);
    AsymmetricCipherKeyPair keyPair = (AsymmetricCipherKeyPair)pemReader.ReadObject();

    RSAParameters rsaParameters = DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)keyPair.Private);
    RSACryptoServiceProvider rsaCryptoServiceProvider = new RSACryptoServiceProvider();
    rsaCryptoServiceProvider.ImportParameters(rsaParameters);

    return rsaCryptoServiceProvider;
}

and next using in Sign(string inputData):

System.Security.Cryptography.RSACryptoServiceProvider rsaCryptoServiceProvider = LoadRSACryptoServiceProvider("rsa_key_path"))