opensslを使用して無料の証明書を生成する方法

opensslを使用して無料の証明書を生成する方法

1: openssl とは何ですか? その機能は何ですか?適用シナリオは何ですか?

Baidu 百科事典によると、OpenSSL は、アプリケーションが安全な通信に使用できるオープン ソース ソフトウェア ライブラリ パッケージであり、情報の盗聴を防ぐことができます。

SSL は Secure Sockets Layer の略で、インターネット上で機密性の高い送信を実現します。 Netscape は、最初の Web ブラウザをリリースしたときに SSL プロトコル標準を提案しました。その目的は、2 つのアプリケーション間の通信の機密性と信頼性を確保することであり、サーバー側とユーザー側の両方でサポートできます。

ネットワーク伝送の過程で、ネットワークデータは WiFi ルーターを通過する必要がありますよね? そうすれば、ルーターを介していくつかのトリックを実行してデータを取得できます。したがって、openssl の役割は、情報が盗聴されるのを防ぐことです。

では、OpenSSL はどのようにして情報が盗聴されないことを保証するのでしょうか?したがって、非対称暗号化、デジタル署名、デジタル証明書などの基本的な概念を理解する必要があります。

1.1 非対称暗号化とは何ですか?

非対称暗号化とは、あるキーを使用してデータを暗号化し、その後別のキーを使用して復号化するプロセスです。 2 つのキーは公開キーと秘密キーです。

秘密鍵に基づいて公開鍵を計算することはできますが、公開鍵に基づいて秘密鍵を計算することはできません。通常、秘密鍵はサーバーによって保持され、公開鍵はクライアントで使用されます。

注: 非対称暗号化の特定のアルゴリズムについては研究しません。

1.2 デジタル署名とは何ですか?

Baidu 百科事典によると、デジタル署名 (公開鍵デジタル署名とも呼ばれる) は、紙に書かれた署名に似た物理的な署名ですが、公開鍵暗号化の分野の技術を使用して実装されています。デジタル情報を認証するために使用される方法です。デジタル署名には、署名用と検証用の 2 つの補完的な操作があります。

機能は次のとおりです。特定の HASH アルゴリズムを使用してメッセージの固定ビット サマリーを計算し、秘密キーを使用してサマリーを暗号化し、前のメッセージを受信者に送信します。受信者は公開キーを使用してサマリーを復号化します。メッセージ ダイジェストもハッシュ アルゴリズムによって計算されます。2 つのダイジェストが一致している場合、データが改ざんされておらず、データが完全であることを意味します。

1.3 デジタル証明書とは何ですか?

Baidu 百科事典によると、デジタル証明書は、インターネット通信における通信相手の ID 情報を示す数字の文字列です。インターネット上の通信エンティティの ID を確認する方法を提供します。
これは、CA によって Web サイトに発行される ID の形式です。これには、Web サイトの公開キー、有効期間、Web サイトのアドレス、および CA のデジタル署名が含まれます。

機能は次のとおりです。CA の秘密キーを使用して、Web サイトの公開キーとその他の情報に署名します。クライアントがサーバーに要求すると、Web サイトはクライアントに証明書を送信します。クライアントは最初に CA のデジタル署名を通じて CA の ID を検証し、証明書の信頼性と整合性を証明します。

非対称暗号化、デジタル署名、デジタル証明書の概念を理解した後、データが偽造されていないことをどのように保証するかを見てみましょう。

SSLはユーザーとサーバーの認証を実装します

さて、質問について考えてみましょう。今、Blog Garden の Web サイトにアクセスした場合、本物の Blog Garden にアクセスしているのか、偽の Blog Garden にアクセスしているのかをどうやって見分けるのでしょうか。ブログガーデン ウェブサイトのサーバーが偽造されているかどうかを判断するために、SSL には次のようなルールがあります。サーバーにリクエストを送信すると、サーバーは受信者にデジタル証明書を返す必要があります。デジタル証明書を取得すると、内部の CA デジタル署名に基づいてデジタル証明書の正当性を検証できます。デジタル証明書が Blog Garden のものであることを証明できたとしても、証明書を送信したサーバーが Blog Garden のものであるとは限らないのでしょうか?この問題を解決するために、取得する証明書には Blog Garden の公開鍵が含まれています。以降の通信では、クライアントは公開鍵を使用して Blog Garden サーバーへのデータを暗号化します。Blog Garden サーバーは、内部のデータを復号化するために秘密鍵を使用する必要があります。データを解読できる限り、彼は合法であり、そうでなければ偽造されたということになります。偽造された場合、通信は不可能になります。したがって、SSL はサーバー認証の問題を解決します。

通信中に暗号化されたデータが盗まれるのを防ぐにはどうすればよいでしょうか?

クライアントが初めてサーバーにリクエストを送信するとき(証明書を取得する前のリクエスト)、リクエストには乱数(たとえば A)が挿入され、証明書に対するサーバーの応答にも乱数(たとえば B)が含まれます。クライアントが証明書を取得した後、公開キーを使用して乱数(たとえば C)を暗号化し、サーバーに送信します。したがって、クライアントとサーバーには A、B、C の 3 つの乱数があります。双方ともこれらの乱数と同じアルゴリズムを使用してキーを生成し、その後のすべての通信ではこの対称キーが使用されます。

一般的に言えば、これら 3 つのキーは 3 つの乱数からランダムに生成されるため、同時に漏洩することはありません。そして、乱数の 1 つが公開鍵を使用して暗号化されます。したがって、これがデータが盗まれないことを保証する方法です。

上記は、インターネット上で見られる概念的な質問の一部です。これらを簡単に理解し、概念であることを理解してください。当社の openssl は、SSL の実装バージョンです。したがって、openssl の役割は情報の盗難を防ぐことであり、これは上記の知識ポイントを通じて実現されます。

openssl のアプリケーション シナリオ:

http ウェブサイトを使用すると、ウェブサイト上に広告が表示されることがよくあります。これらの広告は、実際にはウェブサイト自体によって掲載されているわけではなく、中間の運営者がコンテンツを改ざんすることによって表示されます。これで、https テクノロジー (openssl ベース) を使用してデータを暗号化できるようになりました。データが改ざんされないことを保証します。

2: opensslを使用して無料の証明書を生成する

1 opensslツールを使用してRSA秘密鍵を生成する

コマンドを使用します:

openssl genrsa -des3 -out server.key 2048

上記のとおり、des3 はアルゴリズムで、2048 ビットの強度 (機密性のため) です。 server.key はキーファイル名です。-out は生成されたファイルのパスと名前を意味します。

以下のように表示されます。

先ほど生成した秘密鍵を確認しましょう。次のコマンドを使用します。

openssl rsa -text -in server.key

次の図に示すように:

以下のように、コマンド cat server.key を使用して server.key を表示し続けます。

2. 証明書署名要求CSRファイルを作成する

次のコマンドを使用します。

openssl req -new -key server.key -out server.csr

-keyはCA秘密鍵を指定することを意味します
-out は server.csr が証明書ファイルを生成することを意味します

以下のように表示されます。

上記のコマンドを実行すると、CSR の生成時に次の情報を入力するよう求められます。

国名(2文字コード)[]:CN // 国コードを入力します。中国の場合はCNと入力します。
州または県名(フルネーム) []:HangZhou // 州を入力してください。ここにHangZhouと入力してください
地域名 (例: 都市) []:HangZhou // 都市名を入力します。ここでも HangZhou と入力します。
組織名 (例: 会社) []:tbj // 組織名 (または会社名、ここでは tbj と記述) を入力します。
組織単位名 (例: セクション) []:tbj // 組織部門を入力します 共通名 (例: 完全修飾ホスト名) []:*.abc.com // ドメイン名を入力します (私の場合は (*.abc.com)) 
メールアドレス []:[email protected] // あなたのメールアドレス 次の「追加」属性を入力してください
証明書のリクエストと一緒に送付されます
チャレンジパスワード []:123456 // 証明書のパスワード。パスワードを設定しない場合は、Enter キーを押すだけです。

上記の操作を実行すると、現在のディレクトリに次の 2 つのファイルが生成されます。

server.key server.csr

次の図に示すように:

次のように csr ファイルを表示します。

openssl 要求 -text -in server.csr -noout

次の図に示すように:

3. CA証明書を生成する

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

x509の意味: 指定された形式
-inはリクエストファイルを指定することを意味します
-signkey 意味: 自己署名

次の図に示すように:

注: 上記のように、server.crt には証明書所有者の情報、所有者の公開鍵、および署名者の署名が含まれています。

4. クライアント証明書を生成する

クライアント証明書の生成は、CA 証明書の生成と似ています。

4.1. まず秘密鍵を生成する

コマンドを使用します:

openssl genrsa -out クライアントキー 2048

次の図に示すように:

4.2 リクエストファイルの生成

コマンドを使用します:

openssl req -new -key client.key -out client.csr

次の図に示すように:

4.3 署名のためにCAに送信する

コマンドを使用します:

openssl x509 -req -days 365 -in client.csr -signkey client.key -out client.crt

次の図に示すように:

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Windows への C/C++ のインストールと構成 (VS2017) OpenSSL 開発環境の構成チュートリアル
  • PHPでopensslを有効にする方法
  • Linux に Nginx をインストールする方法 (pcre と openssl)
  • PHP 7.1 での暗号化と復号化に Mcrypt の代わりに OpenSSL を使用する方法の詳細な説明
  • PHPはopensslに基づく暗号化と復号化の方法を実装します
  • PHP7にopenssl拡張機能をインストールする方法
  • C言語で暗号化機能を実装するためにopenSSLライブラリAESモジュールを使用する詳細な説明
  • Linux (centos7) での OpenSSL のインストールの詳細な説明
  • PHP を再コンパイルせずに PHP に openssl モジュールを追加する方法
  • Linux openssl 基本紹介
  • OpenSSL Heartbleed 脆弱性を検出する Python スクリプト
  • OpenSSL に基づく PHP RSA 暗号化および復号化の例
  • PHP PKI 暗号化技術 (openssl) の詳細な説明
  • PHP における php_openssl.dll の役割を分析する
  • PHP の openssl 暗号化拡張機能の使用の概要 (推奨)
  • openSSL ライブラリの DES モジュールを使用して C 言語で暗号化機能を実装する詳細な説明
  • WindowsにOpenSSLをインストールし、OpenSSLを使用して公開鍵と秘密鍵を生成します。

<<:  いくつかの面接の質問を使ってJavaScriptの実行メカニズムを調べる

>>:  SQL インジェクションの詳細

推薦する

mysql replace into の使用法の詳細な説明

replace ステートメントは、一般的に insert ステートメントに似ています。ただし、テーブ...

Node.js でのブレークポイント再開の実装

序文通常のビジネスニーズ: 写真、Excel などをアップロードします。結局のところ、数 MB のサ...

Apache Spark 2.0ジョブは完了するまでに長い時間がかかります

現象Apache Spark 2.x を使用すると、Spark ジョブがすべて完了しているにもかかわ...

dockerでマウントされたディレクトリが読み書きできない問題を解決する

次のコマンドを使用してコンテナを作成し、ローカルの /home/dock/Downloads ディレ...

jsを使用してシンプルな弾幕スクリーンシステムを実装する

この記事では、弾幕効果を実現するためのネイティブjsの具体的なコードを参考までに共有します。具体的な...

CSS でコンテンツが長すぎる問題を解決する方法の詳細な説明

CSS を記述するときに、デザインに存在する重要なケースを忘れてしまうことがあります。たとえば、コン...

mysql-connector-java.jar パッケージのダウンロード プロセスの詳細な説明

mysql-connector-java.jar パッケージのチュートリアルをダウンロードします: ...

MySQL SELECT実行順序の簡単な理解

SELECT ステートメントの完全な構文は次のとおりです。 (7)選択 (8) DISTINCT ...

nginx を使用して http を https に変換するサンプルコード

最近、小さなプログラムを書いています。その小さなプログラムの公式ウェブサイトはhttpsを使用する必...

Vue での mixin の応用について議論する

Mixin は、再利用可能な機能を Vue コンポーネント間で分散する非常に柔軟な方法を提供します。...

MySQLユーザー管理操作例の分析

この記事では、MySQL ユーザー管理操作について説明します。ご参考までに、詳細は以下の通りです。こ...

MySQL の一時テーブルと派生テーブルについての簡単な説明

派生テーブルについてメイン クエリに派生テーブルが含まれている場合、または SELECT ステートメ...

Docker イメージのエクスポート、インポート、コピーの例の分析

最初の解決策は、イメージを公開イメージリポジトリにプッシュし、それをプルダウンすることです。 2 番...

Mysql を 5.7 にアップグレードした後のグループ クエリの問題を解決する

問題を見つける最近MySQLをMySQL 5.7にアップグレードした後、次のようなクエリでグループ化...

VueのSSRサーバーサイドレンダリング例の詳細な説明

サーバーサイドレンダリング (SSR) を使用する理由検索エンジンのクローラーが完全にレンダリングさ...