hacktricks/cryptography/certificates.md

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 AccessAIAこの拡張機能には、次の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エントリまでしか制限されていません。
ここから

Certificate Transparencyとは

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

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

証明書ログ

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

クエリ

https://crt.sh/で任意のドメインのCertificate Transparencyログをクエリできます。

フォーマット

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

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

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

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

このコマンドは、OpenSSLツールを使用して証明書を変換します。-outform derオプションは、出力形式をDERに指定します。-inオプションは、変換するPEM形式の証明書ファイルを指定します。-outオプションは、変換後のDER形式の証明書ファイルの名前を指定します。

変換されたDER形式の証明書は、指定したファイル名で保存されます。

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

DERをPEMに変換する

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

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

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

    このコマンドでは、certificate.derは変換したいDER形式の証明書ファイルのパスを指定します。変換後のPEM形式の証明書はcertificate.pemという名前で保存されます。

  2. 変換されたPEM形式の証明書をテキストエディタで開きます。

    vi certificate.pem
    

    PEM形式の証明書はBase64エンコードされているため、テキストエディタで内容を確認できます。

以上で、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に変換する

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

  1. まず、PKCS7形式の証明書ファイルを用意します。

  2. 次に、OpenSSLコマンドを使用して、PKCS7形式の証明書をPEM形式に変換します。以下のコマンドを実行します。

    openssl pkcs7 -print_certs -in input.p7b -out output.pem
    

    このコマンドは、input.p7bという名前のPKCS7形式の証明書ファイルを読み込み、output.pemという名前のPEM形式の証明書ファイルに変換します。

  3. 変換が完了すると、output.pemファイルに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 PEM -in private_key.pem -out private_key_pkcs8.pem
    

    このコマンドは、private_key.pemという名前のPEM形式の秘密鍵をPKCS8形式に変換し、private_key_pkcs8.pemという名前で保存します。

  2. コマンドを実行すると、パスワードの入力を求められる場合があります。元のPEM形式の秘密鍵にパスワードが設定されている場合は、パスワードを入力してください。

  3. 変換が完了すると、private_key_pkcs8.pemという名前のファイルに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 (Personal Information Exchange) file, you can use the OpenSSL command-line tool. The PFX file is a container format that combines the certificate and private key into a single file.

Here are the steps to convert the CER and private key to PFX:

  1. Open a command prompt or terminal.

  2. Navigate to the directory where the CER and private key files are located.

  3. Run the following OpenSSL command:

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

    Replace privatekey.key with the filename of your private key file, and certificate.cer with the filename of your CER file. You can also change certificate.pfx to the desired output filename.

  4. Enter a password when prompted. This password will be used to protect the PFX file.

After running the command, OpenSSL will generate the PFX file containing the certificate and private key. Make sure to keep the PFX file secure, as it contains sensitive information.

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 🎥