Apache SSL証明書のために.CERを.CRTに変換する必要がありますか?もしそうなら、どうですか?


121

SSLを使用してApache 2サーバーをセットアップする必要があります。

* .keyファイルを持っていますが、オンラインで見つけたすべてのドキュメント、*。crtファイルが指定されており、CAから提供されたのは* .cerファイルだけです。

* .cerファイルは* .crtと同じですか?そうでない場合、CERをCRT形式に変換するにはどうすればよいですか?


11
CERそして、CRT拡張子は何も意味しません。PKIベンダーが異なれば、同じものに対して異なる拡張子が使用されます。ファイルがバイナリの場合、おそらくASN.1 / DERでエンコードされています。ファイルがで人間が読める場合は-----BEGIN CERTIFICATE-----、PEMでエンコードされています。何がありますか(DERまたはPEM)、何が必要ですか(DERまたはPEM)?
jww 2014

回答:


106

暗号化証明書のファイル拡張子は、期待したほど標準化されていません。デフォルトでは、Windowsは.crtファイルのダブルクリックをWindowsルート証明書ストアに証明書をインポート.cerする要求として扱いますが、証明書を表示するためだけにファイルを要求として扱います。したがって、Windowsには、各タイプのファイルをダブルクリックしたときに何が起こるかについて固有の異なる意味があるという点で異なります。

しかし、それらをダブルクリックしたときにWindowsがそれらを処理する方法は、2つの違いだけです。どちらの拡張機能も、パブリック証明書が含まれていることを示しています。証明書ファイルの名前を変更して、私が見た任意のシステムファイルまたは構成ファイルで、1つの拡張子を別の拡張子に置き換えることができます。また、Windows以外のプラットフォーム(およびWindowsでも)では、ファイルの内容が正しい限り、両者に違いがないため、使用する拡張子に特に注意を払う必要はなく、どちらも同じように扱います。

混乱を招くのは、証明書データをファイルに保存する標準的な方法が2つあることです。1つは「バイナリ」X.509エンコーディングで、もう1つは通常「-----BEGIN CERTIFICATE-----」で始まる「テキスト」base64エンコーディングです。これらは同じデータを異なる方法でエンコードします。ほとんどのシステムは両方の形式を受け入れますが、必要な場合は、opensslまたは他のツールを使用して一方を他方に変換できます。証明書ファイル内のエンコーディングは、誰かがファイルに付けた拡張子とはまったく無関係です。


私の理解では、どちらも X.509エンコーディングです。あなたは別の言い方はしませんが、上記のx.509の非対称的な使用は、読者に別の方法で示唆するかもしれません。読者にとって、これらの2つのエンコーディング間で証明書を相互に変換できることは注目に値します。これは、この回答が述べているように、それらは同じ情報を保持しているためです。openssl x509 -informコマンドで他の回答を参照してください。
FreeText

55

ドキュメントmod_sslによると:

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

証明書ファイルはPEMエンコードされたX.509証明書ファイルである必要があります:

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

これは、信頼できるルート証明書をvagrant boxにインストールすることで、()上zscalerで実行さvagrantれているときに、SSL証明書エラーを解決しますか?私はそれらを使用し、変換を使用してそれらをシンボリックリンクし、コンテンツをファイルにコピーしてから再プロビジョニングしましたが、まだ開発ボックスでエラーが発生します。winvbox homesteadscp/etc/ssl/certsca-certificates.crtgoogle-recaptcha tls sslfile_get_contents
blamb 2017年

54

基本的に、DERとBase64の2つのCER証明書エンコーディングタイプがあります。タイプDERが証明書(asn1エンコードルーチン)の読み込み中にエラーを返した場合は、PEMを試してみてください。

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

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


3
編集しようとすると、cerファイルがバイナリのように見えたときに、DER形式でうまくいきました。ありがとう!
ブラッドパークス

1
読者には、opensslのmanページが便利だと思いました。どのコマンドが何をするか(つまり、どの方法で変換するか)は、あいまいでした。-informパラメーターは、入力-inファイルのフォーマットを指定します。これは直感的ですが、すでに少し混乱している場合は、明示的に知っておくと便利です。openssl.org/docs/manmaster/man1/openssl-x509.html
FreeTextを

32

PKCS#7でエンコードされた証明書データを含む.cerファイルがあり、それをPEMでエンコードされた証明書データ(通常は.crtまたは.pemファイル)に変換するとします。たとえば、PKCS#7でエンコードされたデータを含む.cerファイルは次のようになります。

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

PEM証明書データは次のようになります。

-----証明書の開始-----
MIIHNjCCBh6gAwIBAgIQAlBxtqKazsxUSR9QdWWxaDANBgkqhkiG9w0BAQUFADBm
...
nv72c / OV4nlyrvBLPoaS5JFUJvFUG8RfAEY =
-----証明書の終了-----

.cerファイル(PKCS#7データを含む)を、予想されるPEMデータ(BEGIN CERTIFICATE上記の例のブロック)に変換するOpenSSLコマンドがあります。certfile.cerと呼ぶファイルでこのコマンドを使用して、PKCS#7データをPEM形式に強制変換できます。

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

.cerまたは.pemファイルには、1つ以上の証明書(おそらく証明書チェーン全体)が含まれている可能性があることに注意してください。


1
この仮定のソースがある場合は便利でしょう。私は人々が(おそらく誤って).cer、.crt、.pemを交換可能に使用していると思うので、真実の情報源があれば誤解を修正できます。
PhilT

30

CERは、DERエンコードされたバイナリ形式のX.509証明書です。
CRTは、テキスト(base-64)エンコーディングでカプセル化されたバイナリX.509証明書です。

同じエンコーディングではありません。


13
この答えは間違っています。.CERと.CRTの両方で、DERまたはPEM(テキスト)エンコーディングを使用できます。拡張子.pemと.derはエンコーディングを反映しますが、.cerと.crtは反映しません。詳細
eis 2016

1
実際には、それ逆になるはずです。しかし、これらすべての拡張機能は長い間混乱しているため、それらに依存しないでください。
Claudio Floreani 2017年

16

.cerファイルを.crtファイルに変換する方法(それらは異なる方法でエンコードされています!)

openssl pkcs7 -print_certs -in certificate.cer -out certificate.crt

5
これは私にはうまくいきませんでした!私が使用したもの:openssl x509 -inform der -in certificate.cer -out certificate.pem
sj59 2014

:私は、このエラーメッセージになっていますunable to load PKCS7 object
friederbluemle

@friederbluemleこの回答をチェックしましたか?serverfault.com/questions/417140/...
アレクサンダーPresber

これは、positiveSSL証明書をAzureで使用するためにPKCS12に変換する準備を整えるために必要でした。
オーウェン

16

私はコマンドを使用します:

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

しかし、CERは、DER形式でエンコードされたバイナリ形式のX.509証明書です。CRTは、テキスト(base-64)エンコーディングでカプセル化されたバイナリX.509証明書です。

そのため、おそらく以下を使用する必要があります。

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

次に、証明書をインポートします。

CAをdirにコピーします。

/usr/local/share/ca-certificates/

コマンドを使用:

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

CAストアを更新します。

sudo update-ca-certificates



3

.cerおよび.crtファイルは、キーストアにインポートする限り、交換可能でなければなりません。

.cerファイルの内容を見てください。-----BEGIN CERTIFICATE-----行の前と行の後のすべてを消去し-----END CERTIFICATE-----ます。BEGIN / END行が残り、その間にBase64でエンコードされたものがたくさんあります。

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

次に、keytoolを使用してキーファイルにインポートします。

keytool -import -alias myalias -keystore my.keystore -trustcacerts -file mycert.cer

私を助けたのは、BASE-64 ENCODINGのコメントでした。通常の証明書は明らかに特殊なエンコーディングであり、プレーンテキストを読み取ることはできません。ありがとう。
DRapp

-2

するだけ

openssl x509 -req -days 365 -in server.cer -signkey server.key -out server.crt

8
この行が正確に何をするのか、なぜこれらのパラメーターを正確に使用するのかを詳しく説明しますか?この答えは非常に短く、経験が少ない人には理解しにくいかもしれません。
GameDroids 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.