2012-07-27 13 views
5

クライアントのSSLハンドシェイクでサーバー証明書の検証を追加しています。 CryptographyとC世界に新しいことは、これらのことについての私の考えを明確にしてから、実装から始めると考えました。異なる証明書の種類、暗号化の形式

私はほとんどの場合、証明書のコンセプトを探していましたが、自分のコンセプトを満足するまでには至りませんでした。実際にはもっと混乱が生じました。 :)

私がほとんど理解していないことがいくつかあります: 1. base64形式とは何ですか? DERと同じですか? 2. PEMファイルには常にbase64コンテンツが含まれていますか? 3. Windows証明書ストアで使用される形式は何ですか?それはバイナリですか?

誰かが私を助けてくれますか? これらの事が私のためにクリアされれば非常に感謝します。

答えて

9

X.509証明書の構造は、ASN.1を使用して定義されています。ここでan X.509 certificateの全体的な構造定義の抜粋である:(に充填含まれる値を有する)

Certificate ::= SEQUENCE { 
    tbsCertificate  TBSCertificate, 
    signatureAlgorithm AlgorithmIdentifier, 
    signatureValue  BIT STRING } 

TBSCertificate ::= SEQUENCE { 
    version   [0] EXPLICIT Version DEFAULT v1, 
    serialNumber   CertificateSerialNumber, 
    signature   AlgorithmIdentifier, 
    issuer    Name, 
    validity    Validity, 
    subject    Name, 
    subjectPublicKeyInfo SubjectPublicKeyInfo, 
    issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL, 
         -- If present, version MUST be v2 or v3 
    subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL, 
         -- If present, version MUST be v2 or v3 
    extensions  [3] EXPLICIT Extensions OPTIONAL 
         -- If present, version MUST be v3 
    } 

Certificate値がバイナリ形式であるDERフォーマットを用いて符号化されます。

Base64は、バイナリシーケンスをテキストにエンコードする一般的な方法です。これは、使用されるバイトセットを読みやすいASCII文字に減らすことで(この表現は長くなります)。 PEM形式で

証明書は、デリミタの間に配置された各64文字のチャンクの最後のラインリターン、と、証明書のDER符号化のBase64でエンコードされ:

-----BEGIN CERTIFICATE----- 
MIIB2zCCAUSgAwIBAwIBADANBgkqhkiG9w0BAQQFADAYMRYwFAYDVQQDEw1OZXRn 
... 
-----END CERTIFICATE----- 

あなたPEM形式の秘密鍵を持つこともできます。この場合、デリミタは-----BEGIN RSA PRIVATE KEY-----(一致する場合はEND)となります。

TLS接続中は、DERが使用されます。

Windows証明書ストアが内部で使用しているものは、DERまたはPEM/Base64証明書をインポート/エクスポートできるはずです。


証明書の「種類」は、DER/base64形式よりも広いトピックです。 SSL/TLSに使用されるほとんどの証明書はX.509証明書です。次に、使用プロファイルを取得します。最も一般的なものはInternet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profileです。これは、認証局が証明書を発行する方法と、エンティティがリモート証明書を検証する方法を本質的に定義しています。

また、これらの質問に興味があるかもしれません:

より一般的には、PKIの本を得ることが役立つはずです。

+0

ありがとうブルーノ、それは多くの助けになりました!今私はもっとはっきりとした見方をしている。 Windowsストアのフォーマットに関して、私は証明書を取得するためにCrypto APIを使用しており、バイナリ形式しかサポートしていないようです。これらの証明書を変換するために私自身のBase64エンコーダを書く必要があります。 –

関連する問題