Preciso converter .CER em .CRT para certificados Apache SSL? Se sim, como?

121

Preciso configurar um servidor Apache 2 com SSL.

Eu tenho meu arquivo * .key, mas toda a documentação que encontrei online, arquivos * .crt são especificados, e meu CA forneceu-me apenas um arquivo * .cer.

Os arquivos * .cer são iguais a * .crt? Se não, como posso converter o CER para o formato CRT?

MN
fonte
11
CERe CRTextensões não significam nada. Diferentes fornecedores de PKI usam extensões diferentes para a mesma coisa. Se o arquivo for binário, provavelmente está codificado em ASN.1 / DER. Se o arquivo for legível por humanos com -----BEGIN CERTIFICATE-----, então seu PEM codificado. O que você tem (DER ou PEM) e o que você precisa (DER ou PEM)?
jww

Respostas:

106

As extensões de arquivo para certificados criptográficos não são tão padronizadas quanto você espera. Por padrão, o Windows trata o clique duplo em um .crtarquivo como uma solicitação para importar o certificado para o repositório de certificados raiz do Windows, mas trata um .cerarquivo como uma solicitação apenas para visualizar o certificado. Portanto, eles são diferentes no sentido de que Windows tem algum significado inerente diferente para o que acontece quando você clica duas vezes em cada tipo de arquivo.

Mas a maneira como o Windows lida com eles quando você clica duas vezes neles é a única diferença entre os dois. Ambas as extensões representam apenas que contém um certificado público. Você pode renomear um arquivo de certificado para usar uma extensão no lugar da outra em qualquer sistema ou arquivo de configuração que eu tenha visto. E em plataformas não-Windows (e até mesmo no Windows), as pessoas não são particularmente cuidadosas com a extensão que usam e as tratam de forma intercambiável, já que não há diferença entre elas, desde que o conteúdo do arquivo esteja correto.

Para tornar as coisas mais confusas, há duas maneiras padrão de armazenar dados de certificado em um arquivo: uma é uma codificação "binária" X.509 e a outra é uma codificação "texto" base64 que geralmente começa com " -----BEGIN CERTIFICATE-----". Eles codificam os mesmos dados, mas de maneiras diferentes. A maioria dos sistemas aceita os dois formatos, mas, se necessário, você pode converter um para o outro via openssl ou outras ferramentas. A codificação dentro de um arquivo de certificado é realmente independente da extensão que alguém deu ao arquivo.

TylerH
fonte
Meu entendimento é que ambas são codificações X.509. Você não diz o contrário, mas o uso assimétrico de x.509 acima pode sugerir o contrário ao leitor. Para o leitor, é importante ressaltar que os certificados podem ser convertidos para frente e para trás entre essas 2 codificações, pois como essa resposta menciona, eles contêm as mesmas informações. Veja a outra resposta com os comandos openssl x509 -inform.
FreeText de
55

De acordo com a documentação mod_ssl :

SSLCertificateFile: 
   Name: SSLCertificateFile
   Description: Server PEM-encoded X.509 certificate file

O arquivo de certificado deve ser um arquivo de certificado X.509 codificado por PEM:

openssl x509 -inform DER -in certificate.cer -out certificate.pem
Dmitry Grigansky
fonte
Isso resolverá erros de certificado SSL, quando atrasado zscaler, executando vagrantem win( vbox homestead), instalando nossos certificados raiz confiáveis ​​na caixa do vagrant? Eu scpos usei, usei sua conversão e os vinculei simbolicamente /etc/ssl/certse também copiei o conteúdo para o ca-certificates.crtarquivo antes de reprovisionar, e ainda estou recebendo um google-recaptcha tls sslerro na file_get_contentsdev box.
blamb
54

Basicamente, existem dois tipos de codificação de certificado CER, DER e Base64. Quando o tipo DER retorna um certificado de carregamento de erro (rotinas de codificação asn1), tente o PEM e ele deve funcionar.

openssl x509 -inform DER -in certificate.cer -out certificate.crt

openssl x509 -inform PEM -in certificate.cer -out certificate.crt

Liibo
fonte
3
O formato DER funcionou para mim quando meu arquivo cer parecia binário quando tentei editá-lo ... obrigado!
Brad Parks
1
Para o leitor, achei a página do manual do openssl útil. Foi ambíguo para mim qual dos comandos fez o quê (ou seja, de que maneira foi a conversão). O parâmetro -inform especifica o formato do arquivo -in de entrada, que é intuitivo, mas se você já está um pouco confuso, é bom saber explicitamente. Consulte openssl.org/docs/manmaster/man1/openssl-x509.html
FreeText
32

Presumo que você tenha um arquivo .cer contendo dados de certificado codificados em PKCS # 7 e deseja convertê-los em dados de certificado codificados por PEM (normalmente um arquivo .crt ou .pem). Por exemplo, um arquivo .cer contendo dados codificados em PKCS # 7 tem a seguinte aparência:

----- BEGIN PKCS7 -----
MIIW4gYJKoZIhvcNAQcCoIIW0zCCFs8CAQExADALBgkqhkiG9w0BBwGggha1MIIH
...
POI9n9cd2cNgQ4xYDiKWL2KjLB + 6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G
+ bKhADEA
----- END PKCS7 -----

Os dados do certificado PEM têm a seguinte aparência:

----- BEGIN CERTIFICATE -----
MIIHNjCCBh6gAwIBAgIQAlBxtqKazsxUSR9QdWWxaDANBgkqhkiG9w0BAQUFADBm
...
nv72c / OV4nlyrvBLPoaS5JFUJvFUG8RfAEY =
----- CERTIFICADO FINAL -----

Há um comando OpenSSL que converterá arquivos .cer (com dados PKCS # 7) para os dados PEM que você pode esperar encontrar (o BEGIN CERTIFICATEbloco no exemplo acima). Você pode forçar os dados PKCS # 7 para o formato PEM por meio deste comando em um arquivo que chamaremos de certfile.cer:

openssl pkcs7 -text -in certfile.cer -print_certs -outform PEM -out certfile.pem

Observe que um arquivo .cer ou .pem pode conter um ou mais certificados (possivelmente toda a cadeia de certificados).

Karl Ward
fonte
1
Seria útil se você tivesse uma fonte para essa suposição. Acho que as pessoas usam (possivelmente incorretamente) .cer, .crt, .pem de forma intercambiável), portanto, ter uma fonte da verdade corrigiria os equívocos.
PhilT de
30

CER é um certificado X.509 em formato binário, codificado por DER .
CRT é um certificado X.509 binário, encapsulado em codificação de texto ( base 64 ).

Não é a mesma codificação.

Spawnrider
fonte
13
Esta resposta está simplesmente errada. Ambos .CER e .CRT podem usar a codificação DER ou PEM (texto). As extensões .pem e .der refletem a codificação, .cer e .crt não. Mais detalhes .
eis
1
Na verdade, deveria ser o oposto. Mas todas essas extensões foram confundidas por um longo tempo, então você não deve confiar nelas.
Claudio Floreani
16

A resposta à pergunta como converter um arquivo .cer em um arquivo .crt (eles são codificados de forma diferente!) É:

openssl pkcs7 -print_certs -in certificate.cer -out certificate.crt
Alexander Presber
fonte
5
Isso não funcionou para mim! Eu usei:openssl x509 -inform der -in certificate.cer -out certificate.pem
sj59
Estou recebendo esta mensagem de erro:unable to load PKCS7 object
friederbluemle
@friederbluemle você verificou esta resposta? serverfault.com/questions/417140/…
Alexander Presber
Isso é o que eu tive que fazer para deixar meu cert PositiveSSL pronto para ser convertido em PKCS12 para uso no Azure.
Owen
16

Eu uso o comando:

openssl x509 -inform PEM -in certificate.cer -out certificate.crt

Mas CER é um certificado X.509 em forma binária, codificado por DER. CRT é um certificado X.509 binário, encapsulado em codificação de texto (base 64).

Por isso, talvez você deva usar:

openssl x509 -inform DER -in certificate.cer -out certificate.crt

E então, para importar seu certificado:

Copie seu CA para dir:

/usr/local/share/ca-certificates/

Use o comando:

sudo cp foo.crt /usr/local/share/ca-certificates/foo.crt

Atualize a loja CA:

sudo update-ca-certificates

Hugo LM
fonte
5

Se o seu arquivo cer tiver formato binário, você deve convertê-lo por

openssl x509 -inform DER -in YOUR_CERTIFICATE.cer -out YOUR_CERTIFICATE.crt
Mustafa Burak Kalkan
fonte
3

Os arquivos .cer e .crt devem ser intercambiáveis, desde que sejam importados para um armazenamento de chaves.

Dê uma olhada no conteúdo do arquivo .cer. Apague tudo antes -----BEGIN CERTIFICATE-----e depois da -----END CERTIFICATE-----linha. Você ficará com as linhas BEGIN / END com um monte de coisas codificadas em Base64 entre elas.

-----BEGIN CERTIFICATE-----
MIIDQTCCAqqgAwIBAgIJALQea21f1bVjMA0GCSqGSIb3DQEBBQUAMIG1MQswCQYD
...
pfDACIDHTrwCk5OefMwArfEkSBo/
-----END CERTIFICATE-----

Em seguida, basta importá-lo em seu arquivo de chaves usando o keytool.

keytool -import -alias myalias -keystore my.keystore -trustcacerts -file mycert.cer
Gene Gotimer
fonte
A única coisa que me ajudou foi seu comentário sobre BASE-64 ENCODING. Um certificado normal aparentemente é uma codificação especial e não pode ser lido em texto simples. Obrigado.
DRapp
-2

Apenas faça

openssl x509 -req -days 365 -in server.cer -signkey server.key -out server.crt
Mutuma
fonte
8
Você gostaria de explicar o que esta linha faz exatamente e por que exatamente você usa esses parâmetros? Essa resposta é bastante curta e pode ser difícil de entender para pessoas com menos experiência.
GameDroids de