Asp.net & .pem .crt

poruka: 5
|
čitano: 4.250
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
neaktivan
offline
Asp.net & .pem .crt

dakle...radi se da bih trebao neku vrijednost potpisati sa vrijednosti .pem ključa...i enkodirati u base64 (da...u pitanju je slanje podataka prema payment gateway-u)

sa strane php-a je to vrlo lako učiniti...i pem (privatni ključ) i crt (public ključ) su native unix certifikati...

no iz asp-a...liči mi na mission imposible...u ovom obliku koje jesu zapisi...

 

e sad...konvertirati ključeve u nešto razumljivo windowsima...i pokušati sa te strane...ili neki drugi pristup...više nisam pametan...

od previše pregledanih primjera...više od šume ne vidim drveće...kako bi rekli...iliti...niti jedan mi nije dao ideju...kojim putem krenuti...i što mi je činiti... Smijeh

 

...pa ako ima neka dobra duša...da ukaže na pravac djelovanja...ili što bilo što drugo što bi moglo pomoći...Izlanuo se

do something while necrknes
 
0 0 hvala 0
15 godina
neaktivan
offline
RE: Asp.net & .pem .crt

našao sam nešto...tek sutra ću moći testirati kako radi...

 

evivalent .php kôdu

 

openssl_sign($data, $signature, $pkeyid);
$b64sign = base64_encode($signature);

 

trebao bi biti...(valjda Smijeh)

 

Dim sha1 As New SHA1CryptoServiceProvider()
Dim cert As New X509Certificate2(MapPath("~/App_Data/1751852.pfx"))
Dim rsaCryptoIPT As RSACryptoServiceProvider = DirectCast(cert.PrivateKey, RSACryptoServiceProvider)
Dim encoder As New ASCIIEncoding()
Dim binData As Byte() = encoder.GetBytes(data)
Dim binSignature As Byte() = rsaCryptoIPT.SignData(binData, sha1)


Dim x As String = Convert.ToBase64String(binSignature)

do something while necrknes
15 godina
neaktivan
offline
RE: Asp.net & .pem .crt

nakon desetak dana bjesomučne rovovske borbe...gomile pregledanih stranica na ino forumima...gdje se isti problem ponavlja i ponavlja...ineznamnisamkoliko pokušaja, različitih metoda potpisivanja...sa različitim resultom potpisa...naravno...koji ni jedan nije "prolazio"...naravno...zavrtio sam php unutar IIS-a...proslijedio vrijednosti iz asp-a...i sve je prošlo ok...

 

postavlja se pitanje...u čemu je u stvari kvaka...zar jedan HMAC SHA1 ne može da bude komparativan...i da "radi isti posao"...bez obzira na platformu...

 

...a svega sam se nagledao...vb skripti u kombinaciji sa javom...čista java implemntacija...

 

where is the catch???

do something while necrknes
15 godina
neaktivan
offline
RE: Asp.net & .pem .crt

da vidimo...(što volim sam sebe lupati po glavi Šutim)...

kvaka je bila u slijedećem...u formiranju data stringa sam imao razmake...koje nisam vidio...sve do jutros...

 

da bih vam malo uštedio trud...oko bjesomičnog surfanja...(mada je dobro malo proučiti dokumentaciju o navedenoj problematici)...i evo malo korisnog kôda...kome treba...

konkretan primjer se onosi na online plaćanje "e to mi treba" RBA

 

'Slanje upita prema banci

 

Dim g As New _gateway

Dim vrijeme As String = datum u formatu GGMMDDHHmmSS...GGGGMMDDHHmmSS

Dim nID as String = broj narudžbe

Dim  izn as Integer = iznos narudžbe * 100

Dim uID as String = SessionID

Dim data as String = ""

 

            g.Url = "https://secure.rba.hr/ecgtesthr/enter"

            g.Add("MerchantID", "mID dobiven od banke npr. 1752441")
            g.Add("TerminalID", "tID dobiven od banke npr E780241")
            g.Add("PurchaseTime", vrijeme)
            g.Add("OrderID", nID)
            g.Add("Currency", "980")
            g.Add("TotalAmount", izn)
            g.Add("SD", uID)
            data = "1752715;E7880515;" & vrijeme & ";" & nID & ";980;" & izn & ";" & uID & ";"
            Dim rsa As RSACryptoServiceProvider
            Dim sha As New SHA1CryptoServiceProvider()
            Dim signsrc As Byte() = Encoding.UTF8.GetBytes(data)
            Dim cert As New X509Certificate2(File.ReadAllBytes(MapPath("~/App_Code/1752441.pfx")), "", X509KeyStorageFlags.MachineKeySet)
            rsa = cert.PrivateKey
            Dim binSignature As Byte() = rsa.SignData(signsrc, sha)
            g.Add("Signature", Convert.ToBase64String(binSignature))
            g.Post()

 

 'klasa za slanje podataka prema banci

 

Imports Microsoft.VisualBasic

Public Class _gateway

    Private Inputs As System.Collections.Specialized.NameValueCollection = New System.Collections.Specialized.NameValueCollection
    Public Url As String = ""
    Public Method As String = "post"
    Public FormName As String = "ordersend"

    Public Sub Add(ByVal name As String, ByVal value As String)
        Inputs.Add(name, value)
    End Sub

    Public Sub Post()
        System.Web.HttpContext.Current.Response.Clear()
        System.Web.HttpContext.Current.Response.Write("<html><head>")
        System.Web.HttpContext.Current.Response.Write(String.Format("</head><body onload=""document.{0}.submit()"">", FormName))
        System.Web.HttpContext.Current.Response.Write(String.Format("<form name=""{0}"" method=""{1}"" action=""{2}"" >", FormName, Method, Url))
        Dim i As Integer = 0
        Do While i < Inputs.Keys.Count
            System.Web.HttpContext.Current.Response.Write(String.Format("<input name=""{0}"" type=""hidden"" value=""{1}"">", Inputs.Keys(i), Inputs(Inputs.Keys(i))))
            i += 1
        Loop
        System.Web.HttpContext.Current.Response.Write("</form>")
        System.Web.HttpContext.Current.Response.Write("</body></html>")
        System.Web.HttpContext.Current.Response.End()
    End Sub
   
End Class

 

'prihvat rezultata transakcije od banke

 

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Me.Page.IsPostBack = False Then

            Dim mID As String = Request.Form("MerchantId")
            Dim tID As String = Request.Form("TerminalId")
            Dim pt As String = Request.Form("PurchaseTime")
            Dim oID As String = Request.Form("OrderId")
            Dim xID As String = Request.Form("XID")
            Dim cID As String = Request.Form("Currency")
            Dim Am As String = Request.Form("TotalAmount")
            'Dim sID As String = Request.Form("SessionData")
            Dim sID As String = Request.Form("SD")
            Dim tc As String = Request.Form("TranCode")
            Dim ac As String = Request.Form("ApprovalCode")
            Dim sg As String = Request.Form("Signature")
            Dim data As String = mid & ";" & tid & ";" & pt & ";" & oID & ";" & xID & ";" & cID & ";" & Am & ";" & sID & ";" & tc & ";" & ac & ";"

               'dio za provjeru potpisa

          

                Dim certificate As X509Certificate2 = New X509Certificate2(MapPath("~/App_Code/test-server.crt"), "", X509KeyStorageFlags.MachineKeySet)
                Dim rsacp As RSACryptoServiceProvider = New RSACryptoServiceProvider
                Dim sha As New SHA1CryptoServiceProvider()
                Dim publicKey As String = certificate.PublicKey.Key.ToXmlString(False)
                rsacp.FromXmlString(publicKey)
                Dim verify() As Byte = Encoding.UTF8.GetBytes(data)
                Dim signature() As Byte = Convert.FromBase64String(sg)
                Dim errsigg As String = sg

                Dim ok As Boolean = rsacp.VerifyData(verify, sha, signature)

 

....

daljnje hendlanje podataka prema želji i nahođenju...

kod mene ista forma služi za uzimanje podataka od kupca, slanje podataka o kupovini prema banci i preuzimanje podataka od banke...

 

 

nadam se da sa sa ovim nekome pomogao...

 

do something while necrknes
Poruka je uređivana zadnji put čet 10.12.2009 14:31 (baaab).
15 godina
offline
Asp.net & .pem .crt

Sto nije univerzalan bez obzira na platformu?

 

Jedini bug koji mi se dogadjao (to ni danas neznam objasniti) je kada bi output SHA string  uzeo po defaultu nebi sljakalo, kada bih ga prebacio u lcase bi sljakalo, naizgled su oba stringa ista, cak sam ih usporedjivao znak po znak? Nekakav bug u necem, ali nakon sto sam prebacivao u lowercase radilo bi !?!? WTF?

I'm going woo woo
 
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice