hacktricks/cryptography/certificates.md
2023-07-07 23:42:27 +00:00

20 KiB
Raw Blame History

証明書

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥


Trickestを使用して、世界で最も高度なコミュニティツールによるワークフローを簡単に構築および自動化します。
今すぐアクセスを取得:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

証明書とは

暗号学において、公開鍵証明書、またはデジタル証明書またはアイデンティティ証明書としても知られるものは、公開鍵の所有権を証明するために使用される電子文書です。証明書には、鍵に関する情報、所有者のアイデンティティに関する情報(サブジェクトと呼ばれる)、および証明書の内容を検証したエンティティのデジタル署名(発行者と呼ばれる)が含まれています。署名が有効であり、証明書を検査するソフトウェアが発行者を信頼している場合、その鍵を使用して証明書のサブジェクトと安全に通信することができます。

典型的な公開鍵基盤PKIスキームでは、証明書の発行者は通常、顧客に証明書を発行するために料金を請求する企業である証明書機関CAです。これに対して、信頼のウェブスキームでは、個人が直接お互いの鍵に署名し、公開鍵証明書と同様の機能を果たす形式で行います。

公開鍵証明書の最も一般的な形式は、X.509で定義されています。X.509は非常に一般的なため、特定のユースケースのために定義されたプロファイルによってさらに制約されています。たとえば、RFC 5280で定義されている公開鍵基盤X.509などです。

x509共通フィールド

  • バージョン番号x509形式のバージョン。
  • シリアル番号CAのシステム内で証明書を一意に識別するために使用されます。特に、これは失効情報を追跡するために使用されます。
  • サブジェクト:証明書が所属するエンティティ:マシン、個人、または組織。
  • コモンネーム証明書に影響を与えるドメイン。1つ以上のワイルドカードを含むことができます。
  • C:国
  • 識別名DN:全体のサブジェクト:C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net
  • 地域L:地域の場所
  • 組織O:組織名
  • 組織単位OU:組織の部門(「人事」など)
  • 州または省ST、SまたはP:州または省の名前のリスト
  • 発行者:情報を検証し、証明書に署名したエンティティ。
  • コモンネームCN:証明書機関の名前
  • C:証明書機関の国
  • 識別名DN:証明書機関の識別名
  • 地域L:組織が見つかる場所
  • 組織O:組織名
  • 組織単位OU:組織の部門(「人事」など)
  • Not Before:証明書が有効である最も早い日時。通常、証明書が発行された時点の数時間または数日前に設定され、クロックスキューの問題を回避します。
  • Not After:証明書が無効になる日時。
  • 公開鍵証明書のサブジェクトに属する公開鍵これはCAによって署名される主要な部分の1つです
  • 公開鍵アルゴリズム公開鍵を生成するために使用されるアルゴリズム。RSAのようなもの。
  • 公開鍵曲線楕円曲線公開鍵アルゴリズムで使用される曲線適用される場合。nistp521のようなもの。
  • 公開鍵指数公開鍵を導出するために使用される指数適用される場合。65537のようなもの。
  • 公開鍵サイズ:公開鍵空間のサイズ(ビット単
  • Authority Key Identifier: 発行者証明書の公開鍵から派生したキー識別子を含んでいます。これは発行者公開鍵のハッシュです。
  • Authority Information Access (AIA): この拡張機能には最大2種類の情報が含まれています
  • この証明書の発行者を取得する方法に関する情報CA発行者アクセス方法
  • この証明書の失効を確認するためのOCSPレスポンダのアドレスOCSPアクセス方法
  • CRL Distribution Points: この拡張機能は、この証明書の失効を確認するためのCRLの場所を識別します。証明書を処理するアプリケーションは、この拡張機能からCRLの場所を取得し、CRLをダウンロードしてこの証明書の失効を確認することができます。
  • CT Precertificate SCTs: 証明書に関する証明書透明性のログ

OCSPとCRL Distribution Pointsの違い

OCSPRFC 2560は、OCSPクライアントとOCSPレスポンダから構成される標準プロトコルです。このプロトコルは、CRL全体をダウンロードすることなく、指定されたデジタル公開鍵証明書の失効ステータスを判定します。
CRLは証明書の有効性を確認するための従来の方法です。CRLは、失効または無効になった証明書のシリアル番号のリストを提供します。CRLを使用することで、検証者は提示された証明書の失効ステータスを確認することができます。CRLは512エントリまでしか対応していません。
ここから

証明書透明性とは

証明書透明性は、ドメイン所有者、CA、およびドメインユーザーによるSSL証明書の発行と存在を公開し、検証することによって、証明書に基づく脅威を解決しようとするものです。具体的には、証明書透明性には次の3つの主な目標があります

  • ドメインの所有者が証明書を確認することなく、CAがそのドメインのためにSSL証明書を発行することを不可能または少なくとも非常に困難にする。
  • 証明書が誤ってまたは悪意を持って発行されたかどうかを、任意のドメイン所有者またはCAが確認できるようにするためのオープンな監査およびモニタリングシステムを提供する。
  • 誤ってまたは悪意を持って発行された証明書によってユーザーがだまされることを(可能な限り)防ぐ。

証明書ログ

証明書ログは、証明書の暗号化された、公開監査可能な、追加のみのレコードを維持するシンプルなネットワークサービスです。誰でもログに証明書を提出できますが、証明書機関が最も頻繁に提出するでしょう。同様に、誰でもログをクエリできます。クエリ結果は暗号的な証明として使用でき、ログが適切に動作しているか、または特定の証明書がログに記録されているかを検証できます。ログサーバーの数は大きくなくても構いませんたとえば、世界中で1000を下回る程度。それぞれのログサーバーは、CA、ISP、または他の関係者によって独立して運営される可能性があります。

クエリ

https://crt.sh/で任意のドメインの証明書透明性のログをクエリできます。

フォーマット

証明書を保存するために使用できるさまざまなフォーマットがあります。

PEMフォーマット

  • 証明書に最も一般的に使用されるフォーマットです
  • ほとんどのサーバーApacheは、証明書と秘密鍵を別々のファイルに保存することを想定しています
    - 通常、これらはBase64でエンコードされたASCIIファイルです
    - PEM証明書に使用される拡張子は.cer、.crt、.pem、.keyファイルです
    - Apacheや同様のサーバーはPEM形式の証明書を使用します

DERフォーマット

  • DERフォーマットは証明書のバイナリ形式です
  • すべてのタイプの証明書と秘密鍵をDER形式でエンコードすることができます
  • DER形式の証明書には「BEGIN CERTIFICATE/END CERTIFICATE」ステートメントは含まれません
  • DER形式の証明書は、一般的に「.cer」や「.der」の拡張子を使用します
  • DERは主にJavaプラットフォームで使用されます

P7B/PKCS#7フォーマット

  • PKCS#7またはP7Bフォーマットは、Base64 ASCII形式で保存され、拡張子が.p7bまたは.p7cのファイルです
  • P7Bファイルには証明書とチェーン証明書中間CAのみが含まれており、秘密鍵は含まれていません
  • P7Bファイルをサポートする最も一般的なプラットフォームは、Microsoft WindowsとJava Tomcatです

PFX/P12/PKCS#12フォーマット

  • PKCS#12またはPFX/P12フォーマットは、サーバー証明書、中間証明書、および秘密鍵を1つの暗号化可能なファイルに格納するバイナリ形式です
  • これらのファイルには通常、.pfxや.p12などの拡張子が付いています
  • これらは通常、証明書と秘密鍵をインポートおよびエクスポートするためにWindowsマシンで使用されます

フォーマットの変換

x509をPEMに変換する

openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem

PEMをDERに変換する

To convert a PEM certificate to DER format, you can use the OpenSSL command-line tool. The following command can be used:

openssl x509 -in certificate.pem -outform der -out certificate.der

Replace certificate.pem with the path to your PEM certificate file, and certificate.der with the desired output file name for the DER format.

PEM形式の証明書をDER形式に変換するには、OpenSSLのコマンドラインツールを使用することができます。次のコマンドを使用します。

openssl x509 -in certificate.pem -outform der -out certificate.der

certificate.pemをPEM証明書ファイルのパスに、certificate.derをDER形式の出力ファイル名に置き換えてください。

openssl x509 -outform der -in certificatename.pem -out certificatename.der

DERをPEMに変換する

DER形式の証明書をPEM形式に変換するには、次のコマンドを使用します。

openssl x509 -inform der -in certificate.der -out certificate.pem

このコマンドは、certificate.derという名前のDER形式の証明書を読み込み、certificate.pemという名前のPEM形式の証明書に変換します。

openssl x509 -inform der -in certificatename.der -out certificatename.pem

PEMをP7Bに変換する

注意: PKCS#7またはP7B形式はBase64 ASCII形式で保存され、ファイルの拡張子は.p7bまたは.p7cです。P7Bファイルには証明書とチェーン証明書中間CAのみが含まれており、秘密鍵は含まれていません。P7Bファイルをサポートする最も一般的なプラットフォームはMicrosoft WindowsとJava Tomcatです。

openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer

PKCS7をPEMに変換する

PKCS7形式の証明書をPEM形式に変換する方法は次のとおりです。

  1. PKCS7形式の証明書をテキストエディタで開きます。
  2. ファイルの先頭に-----BEGIN PKCS7-----という行を追加します。
  3. ファイルの末尾に-----END PKCS7-----という行を追加します。
  4. ファイルを保存し、拡張子を.pemに変更します。

これにより、PKCS7形式の証明書がPEM形式に変換されます。

openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem

pfxをPEMに変換する

注意: PKCS#12またはPFX形式は、サーバー証明書、中間証明書、および秘密鍵を1つの暗号化可能なファイルに格納するためのバイナリ形式です。PFXファイルは通常、.pfxや.p12などの拡張子を持ちます。PFXファイルは、通常、Windowsマシンで証明書と秘密鍵をインポートおよびエクスポートするために使用されます。

openssl pkcs12 -in certificatename.pfx -out certificatename.pem

PFXをPKCS#8に変換する
注意: これには2つのコマンドが必要です

1- PFXをPEMに変換する

openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem

2- PEMをPKCS8に変換する

PEM形式の証明書をPKCS8形式に変換する方法を説明します。

  1. 最初に、OpenSSLコマンドを使用してPEM形式の証明書をPKCS8形式に変換します。

    openssl pkcs8 -topk8 -inform PEM -outform DER -in private.pem -out private.pk8 -nocrypt
    

    このコマンドは、private.pemという名前のPEM形式の証明書をprivate.pk8という名前のPKCS8形式の証明書に変換します。

  2. 変換されたPKCS8形式の証明書は、DER形式で保存されます。

    • -topk8オプションは、PKCS8形式の証明書を生成するために使用されます。
    • -inform PEMオプションは、入力ファイルがPEM形式であることを指定します。
    • -outform DERオプションは、出力ファイルをDER形式で保存することを指定します。
    • -in private.pemオプションは、変換するPEM形式の証明書のファイルパスを指定します。
    • -out private.pk8オプションは、変換後のPKCS8形式の証明書の保存先のファイルパスを指定します。
    • -nocryptオプションは、パスワードを使用せずに証明書を変換することを指定します。
  3. 変換が成功すると、private.pk8という名前のPKCS8形式の証明書が生成されます。

これで、PEM形式の証明書をPKCS8形式に変換することができました。

openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8

P7BをPFXに変換する
注意: これには2つのコマンドが必要です

1- P7BをCERに変換する

openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer

2- CERとプライベートキーをPFXに変換する

To convert a CER (certificate) file and a private key to a PFX (PKCS#12) file, you can use the OpenSSL tool. The PFX file format allows you to combine the certificate and private key into a single file, which is commonly used for importing certificates into various systems.

Here is the command to convert the CER and private key files to PFX:

openssl pkcs12 -export -out certificate.pfx -inkey privatekey.key -in certificate.cer

Replace privatekey.key with the path to your private key file, and certificate.cer with the path to your certificate file. The resulting PFX file will be named certificate.pfx.

During the conversion process, you will be prompted to set a password for the PFX file. Make sure to choose a strong password and keep it secure.

After the conversion is complete, you can use the PFX file to import the certificate and private key into applications or systems that support the PFX format.

openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile  cacert.cer


Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築し、自動化します。
今すぐアクセスを取得:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥