私がSSLについて何かを理解しようとするときはいつでも、私はいつも「キー」と「証明書」が何を指すのか追跡するのに苦労しています。私は多くの人がそれらを誤ってまたは交換して使用することを恐れています。鍵と証明書の間に標準的な違いはありますか?
証明書には公開鍵が含まれています。
証明書には、公開鍵のほかに、発行者、証明書の用途、その他の種類のメタデータなどの追加情報が含まれています。
通常、証明書自体は、CAの秘密鍵を使用して認証局(CA)によって署名されています。これにより証明書の信頼性が検証されます。
A社には キーペア があり、公開用に公開キーを公開する必要があるとしましょう(彼のWebサイトではsslとも呼ばれます)。
そのため、有効なCAの秘密鍵で署名されたA社の公開鍵は、A社の証明書と呼ばれます。
例を挙げて説明しましょう。
通常の鍵ペアベースのPKIには、秘密鍵と公開鍵があります。
証明書ベースのシステムでは、秘密鍵と証明書があります。証明書は公開鍵よりも多くの情報を保持しています。
デモ(証明書と秘密鍵を生成できます): http://www.selfsignedcertificate.com/
秘密鍵ファイルと証明書ファイルをダウンロードして開くと、証明書ファイルに次のように多くの情報が含まれていることがわかります。
このサイトから生成された証明書(テキストエディタで開く)と秘密鍵(テキストエディタで開く)を一致させることができます。 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からサーバーに送信されるこの追加情報により、クライアントは自分のサーバーと通信しているかどうかを簡単に知ることができます。
SSL証明書は、Webサイトの安全な接続を保証する信頼できる認証局から取得されます。 SSL証明書には通常、認証のロゴと、コンピュータに送信されるデータの暗号化と復号化に必要な公開鍵が含まれています。 SSLキー機能
セッション中にいくつかのSSLキーを生成できます。それらは、コンピュータとの間で送受信される情報を暗号化および復号化するために使用されます。キーは、情報が変更または改ざんされていないことを確認するために使用されます。
ライフサイクルの違い
証明書はSSLキーよりも長持ちします。 SSL証明書は認証局から取得され、銀行や企業によって定期的に更新されます。一方、SSLキーまたはセッションキーはセッション中に一意に生成され、セッション終了時に破棄されます。
そう、技術者以外の人々が理解できるようにこれを分解しましょう。
このように考えてください。証明書はあなたの銀行のセーフティボックスのようなものです。それは多くの重要なものを含んでいます。一般的にあなたのアイデンティティを含むもの。証明書には公開鍵があり、それを開くには秘密鍵が必要です。
あなたのセーフティボックスは、証明書のように開くためにも2つの鍵を取ります。
セーフティボックスを使用すると、銀行に保管され、公開鍵は証明書と共に保管されるため、銀行の鍵は公開鍵のようになります。 「証明書を取得する」ために必要な秘密鍵があります。セーフティボックスの例では、公開鍵に加えて秘密鍵も必要です。
実際にセーフティボックスを開く前に、まず身元を確認する必要があります(証明書要求のようなものです)。あなたが識別されたら、あなたはあなたの安全箱を開けるためにあなたの秘密鍵と公開鍵を一緒に使う。これは、証明書を要求してから、証明機関から証明書を取得するのと似ています(識別できる(信頼できる)、正しい鍵を持っている限り)。