Documentação do Mercado Livre
Confira todas as informações necessárias sobre as APIs Mercado Livre.
Documentação do
Infraestrutura: Criptografia e segurança de transporte
O que protegemos com TLS?
- Interceptação de dados - Confidencialidade: os dados estarão criptografados, ilegíveis para terceiros.
- Modificação em trânsito - Integridade: o TLS garante que as informações não foram modificadas durante o trânsito.
- Autenticidade - Identidade do servidor: por meio dos certificados digitais, o TLS assegura ao usuário que o servidor remoto "é efetivamente quem diz ser", evitando que possam usar o nome da sua organização para construir sites de phishing.
Uma implementação incorreta do TLS pode resultar em:
- Roubo de tokens de acesso (ATO).
- Fuga de informações de clientes.
- Manipulação não autorizada de dados.
- Perda de confiança.
- Descumprimento regulatório: PCI DSS, LGPD, GDPR, entre outras.
Requisitos de TLS
São necessárias versões seguras de TLS, tais como: TLS 1.3 (recomendado) ou TLS 1.2. As versões de TLS (1.0 e 1.1) possuem vulnerabilidades conhecidas que permitem a atacantes decifrar comunicações. Não é suficiente "ter HTTPS" - a versão e a configuração do protocolo são críticas.
Cipher suites recomendadas
Para TLS 1.3 (idealmente)
TLS_AES_256_GCM_SHA384TLS_AES_128_GCM_SHA256TLS_CHACHA20_POLY1305_SHA256
Para TLS 1.2 (aceitas)
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
Cipher suites não aceitas
Qualquer suite que use:
- RC4 (vulnerável)
- DES/3DES (fraco)
- MD5 (broken)
- CBC mode sem AEAD (vulnerável a padding oracle)
- RSA key exchange sem ECDHE (sem forward secrecy)
- NULL encryption
- EXPORT ciphers
Visualização do problema
❌ COM TLS 1.0 ou 1.1 (vulnerável):
Seu App --------------------------------► API MercadoLibre
|
[Atacante]
|
+-- Pode explorar vulnerabilidades conhecidas
como BEAST, POODLE, etc. para decifrar
seus tokens e dados.
✅ COM TLS 1.2+ (seguro):
Seu App ════════════════════════════════► API MercadoLibre
|
[Atacante]
|
+-- Não pode decifrar a comunicação.
Os dados estão protegidos.
Como verificar qual versão de TLS meu servidor usa?
Opção 1: usar o SSL Labs
- Acesse: https://www.ssllabs.com/ssltest/
- Insira o domínio da aplicação que se integra (ex: seuapp.com)
- Aguarde a avaliação ser concluída.
- Procure a seção "protocols"
Resultado no SSL Labs:
| Resultado | Ação |
|---|---|
| TLS 1.3: Yes, TLS 1.2: Yes, TLS 1.1: No, TLS 1.0: No | ✅ Correto |
| TLS 1.1: Yes ou TLS 1.0: Yes | ❌ Desabilitar versões antigas |
Opção 2: verificar com comandos por meio de um terminal no servidor
# Verificar se TLS 1.3 está habilitado (recomendado) openssl s_client -connect tudominio.com:443 -tls1_3 # Verificar se TLS 1.2 está habilitado (deve funcionar) openssl s_client -connect tudominio.com:443 -tls1_2 # Verificar se TLS 1.1 está desabilitado (deve falhar) openssl s_client -connect tudominio.com:443 -tls1_1 # Verificar se TLS 1.0 está desabilitado (deve falhar) openssl s_client -connect tudominio.com:443 -tls1
| Comando | Resultado esperado | Significa |
|---|---|---|
-tls1_3 |
Conexão bem-sucedida | ✅ TLS 1.3 habilitado (ideal) |
-tls1_3 |
Erro de conexão | ⚠️ TLS 1.3 não disponível (aceitável se TLS 1.2 funcionar). Recomenda-se habilitá-lo |
-tls1_2 |
Conexão bem-sucedida | ✅ TLS 1.2 habilitado (mínimo exigido) |
-tls1_2 |
Erro de conexão | ❌ TLS 1.2 não habilitado (problema grave), é necessário habilitá-lo |
-tls1_1, -tls1 |
Erro de conexão | ✅ TLS 1.1 desabilitado (correto). Caso contrário, deve ser desabilitado o mais rápido possível |
Requisitos de Certificados
- Aceitar um documento de identidade sem olhar para a foto.
- Assinar um contrato sem verificar quem o apresenta.
- Entregar as chaves da sua casa a qualquer pessoa que diga ser o chaveiro.
É por isso que a aplicação que se integra deve:
Validar certificados
Sempre ter habilitada a opção de verificação de certificados em produção.
❌ Com a validação de certificados desabilitada:
Seu app aceita QUALQUER certificado, inclusive um falso de um atacante.
Seu App ----------► [Atacante com cert falso] ----------► MercadoLibre
|
+-- Lê e modifica TUDO
✅ Com a validação habilitada:
Seu app rejeita certificados inválidos ou falsos.
Seu App ══════════════════════════════════════════► MercadoLibre
[Atacante] ✗ Não pode interceptar
Exemplos de más práticas e sua implementação correta.
Em Python:
# ❌ PERIGO!
requests.get(url, verify=False)
# ✅ A forma correta:
requests.get(url) # Valida por padrão
# ou explicitamente:
requests.get(url, verify=True)
Em Node.js:
// ❌ PERIGO!
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'
// ✅ A forma correta é não fazer nada especial, valida por padrão.
Em PHP:
# ❌ PERIGO!
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
# ✅ A forma correta:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
Para outras linguagens, procure estes padrões perigosos (exemplos comuns):
| Linguagem | Padrão perigoso | Se encontrar: |
|---|---|---|
| Java | TrustAllCerts e/ou HostnameVerifier que retorna true |
❌ Problema grave, use o SSLContext padrão que já verifica corretamente |
| C#/.NET | ServerCertificateValidationCallback = ... que retorna true |
❌ Problema grave, recomenda-se não configurar nenhum callback pois usa validação padrão |
| Go | InsecureSkipVerify: true |
❌ Problema grave, use o cliente padrão que já verifica |
| cURL | --insecure ou -k |
❌ Verificar se é produção, remover a flag –insecure ou -k |
Verificar hostname
O CN (Common Name) ou SAN (Subject Alternative Name) deve coincidir com o domínio ao qual você se conecta.
❌ INCORRETO:
Você se conecta a: api.mercadolibre.com Certificado diz: *.exemplo-atacante.com → Sem verificação de hostname, seu app aceita este certificado falso
✅ CORRETO:
Você se conecta a: api.mercadolibre.com Certificado diz: *.mercadolibre.com (coincide) → Seu app verifica que o nome coincide antes de continuar
Como validar?
A maioria das bibliotecas HTTP modernas verifica o hostname por padrão. Verifique que não foi desabilitado de forma explícita:
| Linguagem | Padrão perigoso | Se encontrar: |
|---|---|---|
| Python | assert_hostname=False |
❌ Problema, elimine o padrão perigoso ou defina o valor como true |
| Node.js | checkServerIdentity: () => undefined |
❌ Problema, remova esta opção completamente |
| Java | setHostnameVerifier(NoopHostnameVerifier) |
❌ Problema, remova esta linha (use o verificador padrão) |
| Go | InsecureSkipVerify: true |
❌ Problema, remova esta linha (use o verificador padrão). Ou defina o valor como true |
Verificar a validade de um certificado SSL
Para verificar datas de geração, datas de vencimento, hostname, versões de TLS, cipher suites e mais, podemos usar as ferramentas do SSL Labs.
O SSL Labs analisa seu servidor e fornece uma nota de A+ a T que resume o nível de segurança, onde A+ corresponde a um nível de segurança ótimo e T a um baixo nível de segurança.
| Nota | Significado | O que fazer? |
|---|---|---|
| A+ | Excelente, configuração ótima com HSTS | ✅ Perfeito, não alterar nada |
| A | Muito boa. Cumpre todas as melhores práticas | ✅ Aceitável para produção |
| B | Boa, mas com melhorias possíveis | ⚠️ Revisar recomendações |
| C - T | Configurações inseguras | ❌ Corrigir antes de ir para produção |
Exemplo: verificar o certificado do Mercado Livre:
- Acesse https://www.ssllabs.com/ssltest/
- Consulte por: api.mercadolibre.com
- Você verá a nota
Exemplo: verificar SEU certificado:
- Acesse https://www.ssllabs.com/ssltest/
- Consulte por: seu-dominio.com
- Você verá a nota: Se a nota for A ou B, estará pronto para produção. Se for C ou menor, você deve revisar as recomendações e, após corrigidas, realizar o teste novamente
Como verificar que minha aplicação que se integra cumpre com este requisito?
- Minha aplicação usa TLS 1.2 ou superior?
- Tenho habilitada a validação de certificados?
- Minhas dependências de SSL/TLS estão atualizadas?
- Meu servidor possui certificado válido e vigente?
- Estou verificando frequentemente as datas de alterações dos certificados?
Referências
- OWASP TLS cheat sheet: guia completo de melhores práticas TLS.
- SSL Labs: Ferramenta para analisar a configuração TLS do seu servidor.
- Mozilla SSL configuration generator: gera configuração TLS segura para o seu servidor.
- CWE-295: Documentação sobre a validação incorreta de certificados.
- testssl.sh: Ferramenta de linha de comando para auditar TLS.
Glossário
| Termo | Significado |
|---|---|
| TLS | Transport Layer Security - Protocolo que criptografa a comunicação entre seu app e o servidor. Versões seguras: 1.2 e 1.3 |
| SSL | Secure Sockets Layer - Versão antiga do TLS, não é mais segura. Não confundir com TLS |
| HTTPS | HTTP + TLS = Comunicação web criptografada. O "S" significa "Secure" |
| Certificado digital | Documento eletrônico que verifica a identidade de um servidor (como uma carteira de identidade digital) |
| CA (Certificate Authority) | Entidade confiável que emite certificados (ex: DigiCert, Let's Encrypt, Comodo) |
| Cipher Suite | Conjunto de algoritmos usados para criptografar uma conexão |
Próximo: Gestão de Identidades e Acessos.