8

クライアントの1つに対して、SSLハンドシェイクでサーバー証明書の検証を追加しています。暗号化とCの世界に非常に慣れていないので、最初にこれらのことについての私の概念を明確にし、次に実装から始めると思いました。

それで、私は主に証明書の概念を探してたくさんグーグルで検索しましたが、私の概念を満足のいくように明確にすることはできませんでした。実際、それはさらに混乱を招きました。:)

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

誰かがここで私を助けてくれませんか。これらのことが私のためにクリアされれば非常にありがたいです。

4

1 に答える 1

11

X.509証明書の構造は、ASN.1を使用して定義されます。X.509証明書の全体的な構造定義の抜粋を次に示します。

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形式の証明書は、証明書のDERエンコーディングのBase64エンコーディングであり、各64文字チャンクの最後に行リターンがあり、区切り文字の間に配置されます。

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

PEM形式の秘密鍵を使用することもできます。その場合、たとえば、区切り文字は-----BEGIN RSA PRIVATE KEY-----(および一致するEND)になります。

有線では、TLS接続中にDERが使用されます。

Windows証明書ストアが内部で何を使用するかは実際には問題ではなく、DERまたはPEM/Base64証明書をインポート/エクスポートできる必要があります。


証明書の「タイプ」は、DER/base64形式よりも幅広いトピックです。SSL/TLSに使用されるほとんどの証明書はX.509証明書です。次に、使用状況プロファイルを取得します。最も一般的なものは、インターネットX.509公開鍵インフラストラクチャ証明書および証明書失効リスト(CRL)プロファイルです。これは、認証局が証明書を発行する方法と、エンティティがリモート証明書を検証する方法を基本的に定義します。

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

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

于 2012-07-27T17:18:03.740 に答える