#!/intro

A gestão adequada de chaves privadas requer, muitas vezes, a sua conversão entre diferentes formatos, seja por requisitos de compatibilidade com aplicações específicas, integração com diferentes plataformas ou necessidade de exportação controlada.

O OpenSSL disponibiliza um conjunto de comandos para converter chaves privadas entre os formatos mais utilizados, garantindo a preservação da integridade criptográfica do material sensível.


> formatos

Os formatos mais comuns de chaves privadas incluem:

  • PEM (Privacy Enhanced Mail)
    Formato textual, codificado em Base64, muito usado em Unix/Linux. Os dados são encapsulados entre cabeçalhos e rodapés legíveis. Ideal para transporte e fácil leitura. Por ser um formato baseado em texto, é também mais facilmente integrado em ficheiros de configuração e scripts.
    Extensões comuns: .pem, .key, .crt, .cer, .cert

  • DER (Distinguished Encoding Rules)
    Formato binário, sem cabeçalhos, utilizado para dados estruturados em ASN.1. Predominante em ambientes Windows e aplicações Java. Por ser binário, é mais compacto mas ilegível sem ferramentas específicas.
    Extensões comuns: .der, .cer

  • PKCS#8 (Public-Key Cryptography Standards #8)
    Define a estrutura para armazenamento de chaves privadas. Suporta vários algoritmos (RSA, DSA, EC) e pode ser codificado em DER ou PEM. Permite ainda proteger a chave privada através de algoritmos simétricos, acrescentando uma camada adicional de segurança ao armazenamento.
    Extensões comuns: .p8, .pk8, .pem

  • PKCS#12 (Public-Key Cryptography Standards #12)
    Formato binário utilizado para armazenar de forma agregada uma chave privada, o certificado correspondente e, opcionalmente, a cadeia de certificação completa. Apesar de conter múltiplos elementos, permite extrair individualmente a chave privada.
    Extensões comuns: .p12, .pfx


> PEM_DER

Converter uma chave privada de formato PEM para DER:

openssl rsa \
        -in private-key.pem \
        -outform DER \
        -out private-key.der

Para chaves EC:

openssl ec 
        -in ec-key.pem \
        -outform DER \
        -out ec-key.der

> DER_PEM

Converter uma chave privada de formato DER para PEM:

openssl rsa \
        -inform DER \
        -in private-key.der \
        -out private-key.pem

Para chaves EC:

openssl ec 
        -inform DER \
        -in ec-key.der \
        -out ec-key.pem

> PKCS#8

Converter uma chave RSA para formato PKCS#8:

openssl pkcs8
        -topk8 \
        -inform PEM \
        -outform PEM \
        -in rsa-key.pem \
        -out rsa-key-pkcs8.pem \
        -nocrypt

Para exportar uma chave protegida por cifra:

openssl pkcs8 \
        -topk8 \
        -inform PEM \
        -outform PEM \
        -in rsa-key.pem \
        -out rsa-key-pkcs8.pem

> PKCS#12

Extrair a chave privada de um ficheiro PKCS#12:

openssl pkcs12 \
        -in bundle.p12 \
        -nocerts \
        -nodes \
        -out private-key.pem

Para extrair a chave protegida por cifra:

openssl pkcs12 \
        -in bundle.p12 \
        -nocerts \
        -out private-key.pem

> consideracoes

Durante o processo de conversão, é fundamental garantir que:

  • As permissões dos ficheiros das chaves são restritas (chmod 600).
  • As chaves privadas não sejam transferidas ou armazenadas em ambientes não controlados.
  • A chave privada extraída é cifrada.

> conclusão

A conversão correta de chaves privadas é uma tarefa essencial em operações criptográficas, particularmente em ambientes heterogéneos ou quando diferentes aplicações exigem formatos específicos. O OpenSSL disponibiliza ferramentas versáteis para efetuar estas operações com segurança, desde que acompanhadas de boas práticas na gestão e proteção dos materiais sensíveis.

> status: converted
> exit 0