web-dev-qa-db-ja.com

.pem、.cer、および.derの違いは何ですか?

.pem.cer、および.derの違いは何ですか?

私の知る限り、.cerには公開鍵が含まれています。この公開鍵を使用してデータを暗号化するために使用できるオープンフレームワークはありますか?

50
Jacky

.pem.cer、および.derはすべて、X.509 v3証明書を含むファイルのファイル拡張子です。

.der拡張子

DERは、証明書を構成するデータをエンコードする方法です。 DER自体は任意の種類のデータを表すことができますが、通常はエンコードされた証明書またはCMSコンテナを表します。

証明書の構造は、ASN.1データ表現言語を使用して記述されます。 BERとDERは、ASN.1で記述されたデータのバイナリエンコード方式です。

.pem拡張

PEMは、バイナリデータを文字列(ASCIIアーマー)としてエンコードする方法です。ヘッダーとフッターの行(エンコードされるデータのタイプを指定し、データがチェーンされている場合に開始/終了を表示)が含まれ、中央のデータはベース64データです。証明書をエンコードする場合、DER証明書のベース64エンコードが含まれます。 PEMはPrivacy Enhanced Mailの略です。メールには、DERなどのエンコードされていないバイナリ値を直接含めることはできません。

PEMは、公開/秘密キー、証明書要求などの証明書に関連する他の種類のデータをエンコード/保護する場合もあります。コンテンツが一般的なX509v3証明書である場合、PEMは次のようにエンコードされます。

-----BEGIN CERTIFICATE-----
... base 64 encoding of the DER encoded certificate
    with line endings and padding with equals signs ...
-----END CERTIFICATE-----

PEMファイルには完全な証明書チェーンも含まれることがあります。チェーンは、サービスのリーフ/エンド証明書で始まり、それに署名した証明書が続きます。通常は、信頼できるルート証明書までです。そのため、証明書が欠落している場合は、最初の証明書の背後を調べてください。

.cerまたは.crt拡張

.cerは単に証明書を表します。通常はDERでエンコードされたデータですが、WindowsはPEMでエンコードされたデータも受け入れる場合があります。ファイル内の内容を完全に確認するには、コンテンツを確認する必要があります(たとえば、posixシステムでfileユーティリティを使用する)。

その他のOpenSSL形式

OpenSSLでサポートされているもののより広範なリストについては、 この回答 をご覧ください。


証明書で公開鍵containedを使用するには(およびsigned by証明書の署名)X.509証明書を解析してRSA暗号化を実行するライブラリを使用する必要があります。 PEMエンコーディングを検出/処理するツールを使用するか、最初にPEMエンコーディングを削除して証明書をDERに変換できます。

OpenSSLコマンドラインには、PEMとDER間の変換、高レベルの証明書情報の出力、またはASN.1の解析による低レベルビューの取得のための多くのオプションが含まれています。

詳細

ほとんどのASN.1構造と同様に、DERエンコードされた証明書は常に、ASN.1 SEQUENCEのタグエンコードであるバイト30で始まります。ファイルに多くの繰り返しがある場合は、これで問題ありません。厳密に定義されているのはstructureだけです。

同様に、PEMエンコードファイル内のベース64は常にASN.1としての文字Mで始まりますSEQUENCEはバイト30で始まるため、最初の6ビットは001100は、アルファベットの13番目の文字Mのインデックスである12に変換されます。

51
Maarten Bodewes