7.

CRT / CER / DER (.crt / .cer / .der) とは ― X.509 証明書のテキスト / バイナリ表現

編集
この記事の要点
  • CRT / CER / DER はすべて X.509 証明書を表現する拡張子
  • 中身は PEM(テキスト)または DER(バイナリ) のどちらか。拡張子だけでは判別不能
  • .crt / .cer は通常 PEM(一部 Windows DER)、.der は常に DER
  • 変換: openssl x509 -inform der -in cert.der -out cert.pem
  • Windows は CER (DER) を好む、Linux/macOS は PEM が一般的

要点

  • CRT / CER / DER はいずれも X.509 証明書を格納する拡張子。中身が PEM (テキスト) か DER (バイナリ) かで実体が変わる。
  • .crt は主に Unix 系で PEM、.cer は Windows で DER または PEM、.der は明示的にバイナリ。
  • 拡張子は 慣習に過ぎず、信頼できるのは中身。file コマンドや openssl x509 で判別する。
  • PEM ⇔ DER は openssl x509 -inform / -outform で相互変換可能。

概要

TLS / SSL / S/MIME / コード署名などで使われる公開鍵証明書は ITU-T 勧告 X.509 で構造が定義されている。X.509 はあくまで「データ構造の規格」であり、ファイル上の表現には PEM (テキスト) と DER (バイナリ) という 2 系統がある。.crt / .cer / .der の 3 つの拡張子はこの両形式を文脈に応じて使い分けるための慣習的なネーミングだ。

結論として、拡張子だけで形式を判断するのは危険で、.crt なのに中身が DER ということも、.cer なのに PEM ということも普通にある。OS やソフトのインストーラが拡張子を見て関連付け先 (Windows なら証明書マネージャ) を決めているにすぎず、実体は中身次第である。

内部構造

X.509 証明書本体は ASN.1 という抽象構文記法で定義され、それを DER (Distinguished Encoding Rules) で 1 通りに決まるバイナリへエンコードする。DER は冒頭が 0x30 0x82 ... (SEQUENCE) で始まる固定パターンで、中に以下が入っている。

  • tbsCertificate (Subject, Issuer, 有効期間, 公開鍵, 拡張領域)
  • signatureAlgorithm (RSA-SHA256, ECDSA-SHA384 等)
  • signatureValue (CA による署名)

このバイナリをそのまま保存したのが .der ファイル。Base64 化してラベル行で囲むと .crt / .cer / .pem として配布できる PEM になる。

主な用途

  • サーバ証明書のインポート: Windows / macOS の証明書ストアへドラッグするときは .cer / .crt のいずれでも認識される。
  • クライアント側の信頼ルート CA 追加: /usr/local/share/ca-certificates/*.crt + update-ca-certificates (Debian/Ubuntu)。
  • Java keystore へのインポート: keytool -import -file ca.cer -keystore cacerts。中身は PEM/DER いずれでも可。
  • S/MIME 用受信者証明書: メールクライアントが .cer として配布する。

関連形式との比較

  • PEM (.pem): 中身が同じでもラベル付き Base64。.crt / .cer と実体が同一のことが多い。
  • PFX / P12: 証明書 + 秘密鍵もまとめて持つ。CRT/CER 単体は通常公開証明書のみ。
  • P7B / P7C (.p7b): PKCS#7 形式の証明書チェーン。複数証明書 + 署名情報を Base64 / DER で含む。秘密鍵は含まない。

コマンド・ツール

# 中身がどちらか判別
file mycert.crt
# → PEM なら "ASCII text"、DER なら "data"

# DER 形式の証明書を読む (明示的に -inform der)
openssl x509 -inform der -in cert.der -noout -text

# PEM ↔ DER 変換
openssl x509 -in cert.pem -outform der -out cert.der
openssl x509 -inform der -in cert.der -out cert.pem

# Windows でストア追加 (PowerShell)
Import-Certificate -FilePath .\rootCA.cer `
  -CertStoreLocation Cert:\LocalMachine\Root

# Linux (Debian/Ubuntu) で OS 全体に信頼追加
sudo cp myrootCA.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

# Java 配下の cacerts に追加
keytool -importcert -alias myroot -file rootCA.cer \
        -keystore "$JAVA_HOME/lib/security/cacerts" -storepass changeit

注意点

  • 拡張子と中身は別物: 受領した .cer がエディタで開いて -----BEGIN CERTIFICATE----- なら PEM、文字化けするなら DER と判断。
  • ルート CA を OS 全体に追加する影響: そのマシンの全アプリが信頼してしまう。社内検証用は限定範囲のストアへ。
  • 有効期限切れ: 期限切れの中間 CA を放置するとブラウザだけでなく API クライアントも一斉に失敗する。監視を仕込む。
  • サブジェクト代替名 (SAN): 近年の RFC 6125 では CN ではなく SAN を見る。SAN 無し証明書は Chrome 等で拒否される。
  • Windows の二重拡張子: cert.cer.pem のような誤った命名で取り違える事故が多い。配布時はチェック。

関連リンク

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ISO(.iso)
  2. IMG(.img)
  3. VHD / VHDX(.vhd / .vhdx)
  4. QCOW2(.qcow2)
  5. OVA / OVF(.ova / .ovf)
  6. PEM(.pem)
  7. CRT / CER / DER(.crt / .cer / .der)
  8. PFX / P12(.pfx / .p12)
  9. PCAP / PCAPNG(.pcap / .pcapng)
  10. DMP / コアダンプ(.dmp / .core)

最近更新/作成されたページ