1.関連する概念
対称暗号化:暗号化されたファイルを使用してデータを暗号化し、同じ暗号化ファイルを使用してデータを復号化します。
非対称暗号化:暗号化されたファイルを使用してデータを暗号化し、別の暗号化されたファイルを使用してデータを復号化します。
暗号化と復号化:公開鍵と秘密鍵の両方を使用してデータを暗号化できます。公開鍵を使用してデータを暗号化し、次に秘密鍵を復号化する状況を暗号化と復号化と呼びます。
署名と検証署名:秘密鍵を使用してデータを暗号化します。公開鍵の復号化は一般に署名と検証署名と呼ばれます。
説明:
-
公開鍵で暗号化されたデータは、対応する秘密鍵でのみロックを解除できるため、他の人に公開鍵を渡して、送信したいデータを暗号化させることができます。このデータは、秘密鍵でのみあなたに届きます。 。その場合にのみ、有用なデータのロックを解除できます。同様に、秘密鍵を使用してデータに署名する場合、ペアの公開鍵のみがデータのロックを解除できます。秘密鍵を持っているのはあなただけです。したがって、ペアの公開鍵がデータのロックを解除する場合、これはデータを送信することを意味します。それどころか、そうではありません。これは署名と呼ばれます。
-
実際のアプリケーションでは、通常、公開鍵を相手方と交換し、相手方に送信したいデータを公開鍵で暗号化し、取得した後、秘密鍵で復号化します。彼が送信したいデータは、最大限のセキュリティを確保するために、公開鍵で暗号化され、取得後に秘密鍵で復号化されます。
非対称暗号化関連のアルゴリズム
RSA:暗号化と復号化に使用できます。署名の検証にも使用できます。
DSA:署名にのみ使用できます。
SHA / MD5:暗号化、復号化、署名には使用されません。ダイジェストアルゴリズムと呼ばれます。固定長の要約はデータの内容に基づいて生成され、この要約値の文字列は元のデータと対応する関係があります。ただし、この要約を元のデータに復元することはできません。
説明:
- SHA / MD5暗号化の実際のアプリケーションでは、暗号化されるデータが非常に大きくなる可能性があるため、暗号化には時間と手間がかかります。したがって、通常、元のデータが最初にダイジェストされ、次にダイジェスト値が暗号化され、元のデータのプレーンテキストと暗号化されたダイジェスト値が渡されます。このようにして、暗号化されたダイジェスト値のロックを解除し、取得したデータのダイジェスト値と比較して、データが変更されたかどうかを知ることができます。
公証人CA
質問:一般公開鍵はプレーンテキストで他の人に送信されません。通常の状況では、ファイルが生成されます。このファイルは公開鍵ファイルであり、このファイルを他の人に渡してデータを暗号化することができます。しかし、送信プロセス中に誰かが悪意を持って破壊した場合、あなたの公開鍵を彼の公開鍵に置き換え、公開鍵を取得した当事者がデータを暗号化すると、彼は自分の秘密鍵でデータを復号化できませんか?
回答:この問題を解決するには、公証人がこれを行う必要があります。誰でも公開鍵を発行したかどうかを確認できます。これがCAです。公開鍵を確認するCAの原則も非常に単純で、独自の公開鍵をすべての人に公開します。公開鍵を公開したい人は、公開鍵とID情報をCAに送信できます。CAは暗号化に独自の秘密鍵を使用します。これは、ここでは署名とも呼ばれます。次に、公開鍵と情報を含むこのファイルを証明書ファイルと呼ぶことができます。このようにして、いくつかの公開鍵ファイルを取得するすべての人。ファイルは、CAの公開鍵で復号化できます。暗号化パーティはCAのみであるため、正常に復号化される場合、復号化後の内部の情報はtrueである必要があります。このようにして、公開鍵ファイルのロックを解除し、内部の情報を調べて、これが暗号化する必要のある公開鍵であるかどうかを確認できます。
実際のアプリケーションでは、ほとんどの人は署名するCAを見つけることができません。お金を集めるので、自分で自己署名証明書ファイルを作ることができます。自分で鍵のペアを生成してから、自分で生成した別の鍵のペアを使用して、鍵のペアに署名することです。これは、署名証明書が本当に必要な人だけが対象です。データの通常の暗号化と復号化は、公開鍵と秘密鍵を使用して直接実行できます。
接尾辞名の形式の説明
接尾辞の名前の形式 | 説明 |
キー | 秘密鍵 |
crt | 証明書ファイル、証明書の略語 |
csr | 公開鍵情報、証明書署名要求の略語を含む証明書署名要求(証明書要求ファイル) |
crl | 証明書失効リスト、証明書失効リストの略 |
ペム | 証明書のエクスポートおよびインポート時に使用される証明書の形式と、証明書の最初と最後の形式 |
crt.pem | エクスポート可能な証明書 |
2.CAルート証明書の生成手順
- CA秘密鍵(.key)を生成する
- CA証明書要求の生成(.csr)
- 自己署名ルート証明書(.crt)(CAによって発行された証明書)
openssl genrsa -out ca.key 2048
openssl req -new -key ca.key -out ca.csr
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
実際のソフトウェア開発作業では、サーバーはこの自己署名方式を使用することがよくあります。これは、結局のところ、サードパーティの署名機関を見つけるにはお金と時間がかかるためです。
3.ユーザー証明書を生成する手順
- 秘密鍵(.key)を生成する
- 証明書要求の生成(.csr)
- CAルート証明書(.crt)を使用して証明書に署名します
サーバーユーザー証明書
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
クライアントユーザー証明書
openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr
openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key
pem形式の証明書を生成するpem形式の証明書
を使用する必要がある場合は、証明書ファイル(crt)と秘密鍵ファイル(key)を組み合わせて生成できます。
cat client.crt client.key > client.pem
cat server.crt server.key > server.pem
結果
サーバー証明書:ca.crt、server.key、server.crt、server.pem
クライアント証明書:ca.crt、client.key、client.crt、client.pem
4.別の方法でSSL証明書を生成します
01.
opensslインストールディレクトリのmiscディレクトリ(またはappsディレクトリ)に独自のCAを生成し、プロンプトが表示されたら、スクリプト./CA.sh -newca(Windowsで実行:perl ca.pl -newca)を実行します。が表示されます(パスワード+情報が必要です)。実行後、CA証明書とその秘密鍵を含むdemonCAディレクトリが生成されます。
./CA.sh -newca
- このコマンドを実行すると、パスワードの入力を求められます。このプロセスでは、証明書要求に署名するためのCAキーのペアを生成するため、注意が必要です。
- 1024、RSAは、RSAアルゴリズムを使用して1024ビットキーを生成することを表します。キー強度を強化する必要がある場合(2048ビットキーの生成など)、/ usr / ssl /openssl.cnfのdefault_bitsフィールドを2048に変更できます。
- サーバー側の証明書またはクライアント側の証明書を生成するときは、入力する情報がCAの情報と一致していることを確認する必要があることに注意してください。一致していないと、発行が失敗します。
02.クライアントおよびサーバー証明書アプリケーションを生成する
証明書アプリケーションを生成します。
openssl req -newkey rsa:1024 -out req2.pem -keyout server.key
- ユーザーは、証明書の情報を補足する必要があります。これは、CA証明書の基本情報と一致している必要があります。そうしないと、署名は失敗します。
- 実際のアプリケーションでは、ユーザーは有名なCAに証明書要求を送信することで証明書を申請できます。ただし、ここで確立する必要があるのはルートCAであり、証明書要求に署名できるのは自分自身だけです。そのため、OpenSSLで証明書要求に添付されたキーを使用して要求に署名します。これは、いわゆる「自己署名」です。
03.証明書の発行
証明書の発行:
openssl ca -in req2.pem -out server.crt
- 生成されたCA証明書を使用してサーバー証明書要求に署名するには、「データベースの更新」という単語を使用してCAキーを入力する必要があります。これは、証明書が正常に発行されたことを意味します。
04.キーファイルのパスワードの処理
手順2)で次のコマンドを使用して証明書アプリケーションを生成すると、秘密鍵ファイルが同時に生成されます。
openssl req -newkey rsa:1024 -out req2.pem -keyout server.key
実行時に、パスワードの入力を求められます。このパスワードは、キーファイルの暗号化に使用されます。今後、このファイルを読み取る必要があるときはいつでも、パスワードを入力する必要があります(opensslが提供するコマンドまたはAPIを使用) 。ファイルの保存環境が十分に安全である場合、またはその他ファイルのパスワード保護を削除することもできます。パスワード保護を削除するコマンドは次のとおりです。
openssl rsa -in server.key -out server.key
パスワード保護を削除しない場合、GaussDBがファイルを正常にロードするために、GaussDBのgs_gucツールを使用して、キーファイルの保護パスワードを設定できます。キーファイルのパスワードをgaussdb @ 123として例にとると、次のコマンドを実行するだけです。
gs_guc encrypt –M server –K gaussdb@123
05.証明書の発行に失敗しました
質問1:証明書を発行するとき、証明書情報が正しい場合でも、「データベースの更新」という単語は出力されないため、発行は成功します。ほとんどの場合、「データベースの更新に失敗しました」などの単語が表示されます。 。
この問題を解決するには、2つの方法があります。
方法1:
demoCAでindex.txt.attrを
変更し、unique_subject = yesをunique_subject = noに変更します。
方法2:
demoCAでindex.txtを削除し、
rm index.txt
touch index.TXTにタッチします。
質問2:「そのようなファイルまたはディレクトリはありません」というエラーが表示されます。
このタイプのエラーは通常、コマンドを実行するための誤ったパスが原因で発生します。上記のエラーについては、現在のパスの下にdemoCAがあるかどうかを確認できます。そうでない場合は、パスを切り替えて解決します。
5.gaussdbのSSL関連の設定
GaussDBサーバー側SSL関数関連のパラメーターと構成手順:
ssl = off # (change requires restart)
ssl_cert_file = 'server.crt' # (change requires restart)
ssl_key_file = 'server.key' # (change requires restart)
ssl_ca_file = '' # (change requires restart)
ssl_crl_file = ''
ssl関数を使用する場合は、最初にssl = onを設定し、サーバー側の証明書と秘密鍵ファイルをデータディレクトリにコピーする必要があります(証明書と秘密鍵ファイルの名前は、によってserver.crtとserver.keyになります)。デフォルトでは、それ以外の場合はssl_cert_fileとssl_key_fileを変更する必要があります。秘密鍵ファイルの値は0600を超えてはなりません。大きくしないと、起動に失敗します。
クライアントssl関数に関連する環境変数と構成手順:
PGSSLCERT、PGSSLKEY、PGSSLROOTCERT、PGSSLCRL、PGSSLMODE。具体的な機能と設定方法は以下のとおりです。
gaussdbデータベースのユーザーとセキュリティ管理[SSLを使用した安全なTCP / IP接続] [04]
https://blog.csdn.net/qq_42226855/article/details/109565179
ssl認証リンクの
構成ssl機能を構成する場合、pg_hba.confで、どのリンクがssl認証と暗号化送信を通過するか、どのリンクがssl認証と暗号化送信を使用できないかなどを構成できます。
gaussdbデータベースのユーザーとセキュリティ管理[クライアントアクセス認証] [02]
https://blog.csdn.net/qq_42226855/article/details/109563367
関連する設定を確認する
- プライマリデータベースとスタンバイデータベースはSSL通信を強制します。したがって、証明書の有効期限は2台のマシンの同期に影響し、SSL証明書を置き換える必要があります。
- gsql -d dbname -U username -W password -h floatip -p portは、証明書が使用されていることを示します。
SSL connection (cipher: AES256-SHA, bits: 256)
Type "help" for help.
XXXXXX=>
- 構成ファイルの証明書名が証明書のCN値と一致しているかどうかを確認してください
grep repl_force postgresql.conf
repl_force_cert_check = ''
- 証明書のCN値を表示する
openssl x509 -in server.crt -text
関連リファレンス
gaussdbデータベースのユーザーとセキュリティ管理[SSLを使用したセキュアなTCP / IP接続] [04]
https://blog.csdn.net/qq_42226855/article/details/109565179