hacktricks/cryptography/certificates.md

15 KiB
Raw Blame History

証明書

htARTEHackTricks AWS Red Team Expertを使って、**ゼロからヒーローまでAWSハッキングを学ぶ**

HackTricksをサポートする他の方法


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など。
  • 公開鍵サイズビット単位での公開鍵空間のサイズ。2048など。
  • 署名アルゴリズム:公開鍵証明書に署名するために使用されるアルゴリズム。
  • 署名:発行者の秘密鍵による証明書本体の署名。
  • x509v3拡張
  • キーの使用法:証明書の公開鍵の有効な暗号利用方法。デジタル署名検証、鍵暗号化、証明書署名などが一般的な値です。
  • Web証明書では、_X509v3拡張_として表示され、値がDigital Signatureになります。
  • 拡張キーの使用法証明書が使用できるアプリケーション。TLSサーバー認証、電子メール保護、コード署名などが一般的な値です。
  • Web証明書では、_X509v3拡張_として表示され、値がTLS Web Server Authenticationになります。
  • サブジェクト代替名1つのSSL証明書に追加のホストを指定できます。SAN拡張の使用はSSL証明書の標準的な慣行であり、一般的な名前の使用を置き換える途中です。
  • 基本制約この拡張は、証明書がCA証明書であるかエンドエンティティ証明書であるかを説明します。 CA証明書は他者の証明書に署名するものであり、エンドエンティティ証明書は、たとえばWebページで使用される証明書ですチェーンの最後の部分
  • サブジェクトキー識別子SKIこの拡張は、証明書の公開キーの一意の識別子を宣言します。すべてのCA証明書には必須です。 CAは、発行された証明書の発行者キー識別子AKI拡張に自分自身のSKIを伝播します。これはサブジェクト公開鍵のハッシュです。
  • 権限キー識別子:これには、発行者証明書の公開鍵から派生したキー識別子が含まれます。これは発行者公開鍵のハッシュです。
  • 権限情報アクセスAIAこの拡張には、次の2種類の情報が含まれます
    • この証明書の発行者を取得する方法に関する情報CA発行者アクセス方法
    • この証明書の取り消しを確認できるOCSP応答者のアドレスOCSPアクセス方法
  • CRL配布ポイントこの拡張は、この証明書の取り消しを確認できるCRLの場所を識別します。証明書を処理するアプリケーションは、この拡張からCRLの場所を取得し、CRLをダウンロードしてからこの証明書の取り消しを確認できます。
  • CTプレサーティフィケートSCT:証明書に関する証明書透明性のログ

OCSPとCRL配布ポイントの違い

OCSPRFC 2560は、OCSPクライアントとOCSP応答者から構成される標準プロトコルです。このプロトコルは、CRL全体をダウンロードすることなく特定のデジタル公開鍵証明書の取り消しステータスを決定します。
CRLは証明書の有効性を確認するための従来の方法です。CRLには取り消された証明書のシリアル番号のリストが含まれます。 CRLを使用することで、証明書の提示時にその取り消しステータスを確認できます。 CRLは512エントリまでです。
こちらから。

証明書透明性とは

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

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

証明書ログ

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

クエリ

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

フォーマット

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

PEM形式

  • 証明書に最も一般的に使用される形式です
  • ほとんどのサーバ
openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem

PEMをDERに変換する

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

DERを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形式に変換する

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に変換する

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に変換する

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" %}

htARTE (HackTricks AWS Red Team Expert)で**ゼロからヒーローまでAWSハッキングを学ぶ**

HackTricksをサポートする他の方法