Criptografia de ponta a ponta
Para garantir a segurança de suas transaçÔes Money Out, vocĂȘ deve realizar uma criptografia de ponta a ponta. Isso envolve a criação de um mecanismo de chave pĂșblica-privada, no qual um request Ă© criptografado por meio de uma chave de segurança, e outra chave Ă© usada para validĂĄ-lo.
Portanto, vocĂȘ deve enviar sua chave pĂșblica para o Mercado Pago para a validação de suas transaçÔes, e manter sua chave privada armazenada de forma segura para criptografar seus requests.
Para criar as chaves pĂșblica e privada no Linux ou MacOS, execute o seguinte comando em seu terminal:
terminal
openssl genpkey -algorithm ed25519 -out mpprivate.pem && openssl pkey -in mpprivate.pem -pubout -out mppublic.pem
Em resposta, serĂŁo gerados dois arquivos, um com sua chave pĂșblica, que vocĂȘ deve enviar ao Mercado Pago, e outro com a chave privada, que deve ser armazenada de forma segura em seu sistema.
Para enviar sua chave pĂșblica, vocĂȘ precisarĂĄ se conectar com a equipe de IntegraçÔes. Abaixo, fornecemos o seguinte exemplo de requisição, no qual o arquivo private.key
Ă© lido, o request Ă© criptografado e a assinatura Ă© adicionada ao header.
Go
package main import ( "bytes" "crypto/ed25519" "encoding/base64" "fmt" "io/ioutil" "net/http" ) func main() { // Path to the file storing the private key privateKeyFile := "private.key" // Read the private key from the file privateKeyBytes, err := ioutil.ReadFile(privateKeyFile) if err != nil { fmt.Println("Error reading private key:", err) return } // Convert the private key bytes to a PrivateKey privateKey := ed25519.PrivateKey(privateKeyBytes) // Define your request body requestBody := []byte(`{"key": "value"}`) // Sign the request body with the private key signature := ed25519.Sign(privateKey, requestBody) // Encode the signature to base64 signatureBase64 := base64.StdEncoding.EncodeToString(signature) // Create a new HTTP request req, err := http.NewRequest("POST", "https://example.com/api/endpoint", bytes.NewBuffer(requestBody)) if err != nil { fmt.Println("Error creating request:", err) return } // Add the x-signature header with the base64 encoded signature req.Header.Set("x-signature", signatureBase64) // Send the request client := &http.Client{} resp, err := client.Do(req) if err != nil { fmt.Println("Error sending request:", err) return } defer resp.Body.Close() // Read the response body responseBody, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println("Error reading response body:", err) return } // Print the response body fmt.Println("Response:", string(responseBody)) }
VocĂȘ pode ver outras implementaçÔes de criptografia de acordo com a linguagem de sua preferĂȘncia: