サーバー証明書の種類が多く複雑であったので,一通り理解するためにまとめます
サーバー証明書の形式
サーバー証明書の形式は大別してX.509, PKCS#7があります
X.509
ITU-Tで標準化された証明書形式です.以下が正式な公式Documentとなります
形式
X.509では以下のようなフォーマットとなっています.
- version
- serialNumber
- signature
- issuer
- validity
- subject
- subjectPublicKeyInfo
- issuerUniqueIdentifier
- subjectUniqueIdentifier
- extensions
Google Chromeで証明書を確認する
これでは分かりづらいので実際に見てみることを推奨します.以下のように鍵マークをクリックすることで証明書を確認することができます.
それぞれに記載されるべき内容が分かります.
subjectAltName (SANs)
subjectAltNameはsubjectの代替となる名称です.拡張表記で追加された要素です.しかし,subjectのcommon nameの代替どころか,もはやこちらが認証の主体となっているため,こちらを正しく設定する必要があります.
例えば,Chromeではsubjectのcommon nameでは認証を行わず,subjectAltNameのパラメータでCNを判定しています.背景としては,CNが不確定性を含んでおり,ブラウザのセキュリティホールとなっていたことがあるようです.
subjectAltNameの設定方法にはいくつかあり,
- iPAddress
- dNSName
- directoryName
などで指定できます.dNSNameが今までのCN相当表記をワイルドカードも交えて扱えます.なお,自分がものすごく気になったdNSNameのdNSとはDomain Name Serverのことではなく,Domain Name Systemの略称です.Domain Name Serverを表している訳ではありません.
記法【ASN.1】
X.509ではASN.1という記法を利用します.こちらもITU-Tで規定されています.
以下のような形式となります.例えば,有効期間の書き方は以下のように記載できます.
Validity ::= SEQUENCE { notBefore Time, notAfter Time, ... }
X.509サーバー証明書の拡張子
上記したようにX.509はASN.1形式で記述されており,これをバイナリ化する場合にいくつかのEncode形式が用意されています.そのEncode形式によって拡張子が異なります.
- Basic Encoding Rules (.pem) (Base64 Encoding)
- Distinguished Encoding Rules (.der)
- Canonical Eonciding Rules(.cer)
等が存在します.ただ単にEncoding Ruleが異なるだけで,中身は同一です.対応するEncoding方式でDecodeしてファイルを認識しましょう
PKCS#7
Public key Cryptography Standardsの略称.RSAセキュリティ社が定めた規格.ルート証明書,中間証明書等の証明書を一括して表記することが可能が形式です.PKCS#7がX.509を複数内包する形式と理解してください.
記法
基本的にはX.509と同様にASN.1を使用します
拡張子
.p7b
.pemと互換性があります.