web-dev-qa-db-ja.com

SSLに関して証明書と鍵の違いは何ですか?

私がSSLについて何かを理解しようとするときはいつでも、私はいつも「キー」と「証明書」が何を指すのか追跡するのに苦労しています。私は多くの人がそれらを誤ってまたは交換して使用することを恐れています。鍵と証明書の間に標準的な違いはありますか?

113
drs

証明書には公開鍵が含まれています。

証明書には、公開鍵のほかに、発行者、証明書の用途、その他の種類のメタデータなどの追加情報が含まれています。

通常、証明書自体は、CAの秘密鍵を使用して認証局(CA)によって署名されています。これにより証明書の信頼性が検証されます。

102
LawrenceC

これら二つの絵は一緒に私にすべてを説明しました:

出典: linuxvoice

enter image description here

出典: infosecinstitute

enter image description here

45
Andrejs

A社には キーペア があり、公開用に公開キーを公開する必要があるとしましょう(彼のWebサイトではsslとも呼ばれます)。

  • A社は自分の鍵ペアの証明書を取得するために証明機関(CA)に証明書要求(CR)を行わなければなりません。
  • A社の鍵ペアの公開鍵は秘密鍵ではなく、証明書要求の一部として含まれています。
  • その後、CAはA社のID情報を使用して、要求がCAの証明書発行基準を満たしているかどうかを判断します。
    CAが要求を承認すると、証明書を会社Aに発行します。簡単に言うと、CAは自分の(CAの)秘密鍵を使用して会社Aの公開鍵に署名し、その信頼性を検証します。

そのため、有効なCAの秘密鍵で署名されたA社の公開鍵は、A社の証明書と呼ばれます。

36
Mohsen Heydari

例を挙げて説明しましょう。

通常の鍵ペアベースのPKIには、秘密鍵と公開鍵があります。

証明書ベースのシステムでは、秘密鍵と証明書があります。証明書は公開鍵よりも多くの情報を保持しています。

デモ(証明書と秘密鍵を生成できます): http://www.selfsignedcertificate.com/

秘密鍵ファイルと証明書ファイルをダウンロードして開くと、証明書ファイルに次のように多くの情報が含まれていることがわかります。 enter image description hereenter image description here

このサイトから生成された証明書(テキストエディタで開く)と秘密鍵(テキストエディタで開く)を一致させることができます。 https://www.sslshopper.com/certificate-key -matcher.html

証明書がクライアントの秘密鍵と一致する場合、クライアントはその証明書がクライアントによって与えられたものであるか、またはクライアントの信頼できるエージェント(CA)によって与えられたものであることを確認します。

ただし、秘密鍵と証明書に基づく通信だけに問題があります。

なぜなら、誰でも自分の証明書と秘密鍵を生成できるため、単純なハンドシェイクでは、サーバーが証明書の公開鍵と一致する秘密鍵を知っていること以外は何も証明できません。この問題を解決する1つの方法は、クライアントにそれが信頼する1つ以上の証明書のsetを持たせることです。証明書がセットにない場合、サーバーは信頼されません

この単純なアプローチにはいくつかの欠点があります。サーバーは、証明書内の公開鍵を新しいものに置き換える、時間の経過とともに強力な鍵にアップグレードすることができます(「キーローテーション」)。残念ながら、今では基本的にサーバー構成の変更が原因で、クライアントアプリを更新する必要があります。サーバーがアプリ開発者の管理下にない場合、たとえばサードパーティのWebサービスである場合、これは特に問題となります。アプリがWebブラウザや電子メールアプリなどの任意のサーバーと通信する必要がある場合、この方法にも問題があります。

これらの欠点に対処するために、サーバーは通常、認証局(CA)と呼ばれる有名な発行者からの証明書で構成されています。ホストプラットフォーム(クライアント)は一般的にそれが信頼する有名なCAのリストを含んでいます。サーバーと同様に、CAには証明書と秘密鍵があります。サーバー用の証明書を発行するとき、CAは秘密鍵を使用してサーバー証明書に署名します。その後、クライアントは、サーバーがプラットフォームに認識されているCAによって発行された証明書を持っていることを確認できます。

ただし、いくつかの問題を解決しながら、CAを使用すると別の問題が生じます。 CAは多くのサーバーに対して証明書を発行するため、必要なサーバーと通信していることを確認するための何らかの方法が必要です。これに対処するために、CAによって発行された証明書は、gmail.comなどの特定の名前、または* .google.comなどのワイルドカードセットのホストを使用してサーバーを識別します。

次の例では、これらの概念をもう少し具体的にします。下記のコマンドラインからの抜粋では、opensslツールのs_clientコマンドはWikipediaのサーバー証明書情報を調べます。ポート443がHTTPSのデフォルトであるため、これを指定します。このコマンドは、openssl s_clientの出力をopenssl x509に送信します。openssl x509は、X.509標準に従って証明書に関する情報をフォーマットします。具体的には、コマンドは、サーバー名情報を含むサブジェクトと、CAを識別する発行者を要求します。

$ openssl s_client -connect wikipedia.org:443 | openssl x509 -noout -subject -issuer
subject= /serialNumber=sOrr2rKpMVP70Z6E9BT5reY008SJEdYv/C=US/O=*.wikipedia.org/OU=GT03314600/OU=See www.rapidssl.com/resources/cps (c)11/OU=Domain Control Validated - RapidSSL(R)/CN=*.wikipedia.org
issuer= /C=US/O=GeoTrust, Inc./CN=RapidSSL CA

RapidSSL CAによって、*。wikipedia.orgに一致するサーバーに対して証明書が発行されたことがわかります。

ご覧のとおり、CAからサーバーに送信されるこの追加情報により、クライアントは自分のサーバーと通信しているかどうかを簡単に知ることができます。

4
Uddhav Gautam

SSL証明書は、Webサイトの安全な接続を保証する信頼できる認証局から取得されます。 SSL証明書には通常、認証のロゴと、コンピュータに送信されるデータの暗号化と復号化に必要な公開鍵が含まれています。 SSLキー機能

セッション中にいくつかのSSLキーを生成できます。それらは、コンピュータとの間で送受信される情報を暗号化および復号化するために使用されます。キーは、情報が変更または改ざんされていないことを確認するために使用されます。

ライフサイクルの違い

証明書はSSLキーよりも長持ちします。 SSL証明書は認証局から取得され、銀行や企業によって定期的に更新されます。一方、SSLキーまたはセッションキーはセッション中に一意に生成され、セッション終了時に破棄されます。

もっと読むここ

3
Shekhar

そう、技術者以外の人々が理解できるようにこれを分解しましょう。

このように考えてください。証明書はあなたの銀行のセーフティボックスのようなものです。それは多くの重要なものを含んでいます。一般的にあなたのアイデンティティを含むもの。証明書には公開鍵があり、それを開くには秘密鍵が必要です。

あなたのセーフティボックスは、証明書のように開くためにも2つの鍵を取ります。
セーフティボックスを使用すると、銀行に保管され、公開鍵は証明書と共に保管されるため、銀行の鍵は公開鍵のようになります。 「証明書を取得する」ために必要な秘密鍵があります。セーフティボックスの例では、公開鍵に加えて秘密鍵も必要です。

実際にセーフティボックスを開く前に、まず身元を確認する必要があります(証明書要求のようなものです)。あなたが識別されたら、あなたはあなたの安全箱を開けるためにあなたの秘密鍵と公開鍵を一緒に使う。これは、証明書を要求してから、証明機関から証明書を取得するのと似ています(識別できる(信頼できる)、正しい鍵を持っている限り)。

1
lwood