私が生成したRSA(2048)キーペアがあるとしましょう
private.key
public.key
テスト目的で、自己署名X509証明書を生成したいと思います。
証明書についての私の理解は、
openssl
を使用すると、証明書を簡単に作成できます。
openssl req -new -key private.key -out certificate.csr
しかし、ここで私は混乱しています-なぜそれは私の秘密鍵を必要とするのですか?
おそらくそれに署名する必要があると想像できますwith何か、したがって秘密鍵の使用。しかし、どのようにして公開鍵を取得して証明書に埋め込むのでしょうか。私の秘密キーから私の公開キーをリバースエンジニアリングすることは、数学的に不可能ですよね?
ありがとう!
秘密鍵はあなたを識別する秘密であり、あなたの特定のアイデンティティの署名や検証には秘密鍵が必要です。したがって、あなたのアイデンティティから派生することを意図した何かを生成するすべての操作は、それを必要とします。
また、ここでは証明書を作成していません。証明書署名リクエストを作成しています。これは、アクセスを許可する証明書を生成する相手に渡すものです。
自己署名x509証明書を作成する場合は、次のような-x509パラメータを追加する必要があります。
openssl req -x509 -nodes -days 5000 -newkey rsa:2048 -keyout mypem.key -out mycert.crt
そして、@ bartonjsは正しく、秘密鍵から公開鍵への変換は可能ですが、公開鍵から秘密鍵への変換は不可能です。そのため、公開鍵を渡すことができ、誰もそれを使用してあなたになりすますことはできません。秘密鍵は常に秘密である必要があります。
サーバーへのアクセスを取得するクライアントとして機能し、サーバーがリクエストを許可することを計画している場合は、最初にサーバー上に認証局とサーバーの証明書を設定する必要があります。
スタックオーバーフローのSomoneは、これについてすでにすばらしい答えを持っています。
しかし、基本的には、CAとサーバーのcrtをセットアップしてから、サーバーで次のようなことを行います。
openssl x509 -req -days 30 -in request.csr -CA ca.crt -CAcreateserial -CAkey ca.key -out signedrequest.crt
「signedrequest.crt」をリクエストした人に返します。
言及するのを忘れて、上記のコマンドで-nodesを削除すると、パスワードプロセスがスキップされます。テストには良いが、セキュリティには悪い。参考までに。
私の秘密キーから私の公開キーをリバースエンジニアリングすることは、数学的に不可能ですよね?
いいえ、あなたの方向は逆です。
公開鍵から秘密鍵を取得することは不可能であると考えられています。秘密鍵から公開鍵は簡単です。
RSAの場合、秘密鍵は(n、d)ですが、実際には(p、q、e)です。 p * q = n、および(n、e)は公開鍵です。
ECDSAの場合、秘密鍵はd
です。これは、公開鍵G
を取得するためにQ
を掛けた数です。とにかくカーブを覚えておく必要があるので、G
とd*G
はまだQ
、公開鍵です。
秘密鍵ファイルには、すべての鍵ペアが含まれています。これには、自己署名証明書または証明書署名要求に入れるパブリック部分が含まれており、実際に(自己)署名を行うにはプライベート部分が必要です。
次のコマンドを使用して、秘密鍵ファイルから公開部分をエクスポートできます。
openssl rsa -pubout -in private_key.pem -out public_key.pem