私は中央のWebサーバー(Node.js)を持っていて、複数のクライアントマシン(Nodeも稼働しています)を持っています。これらのクライアントはWebサーバーにデータをプッシュしようとしているので、セキュリティのためにクライアントは最初にメインサーバーに登録します。独自のSSL秘密/公開キーを生成し、サーバーに公開キーを格納します。Node.js:一意の公開鍵を使用してクライアントを認証します(Github SSH鍵認証に似ています)
登録後、クライアントがサーバとの通信を試みるたびに、自身を認証するために公開鍵(?)を提示する必要があります。
私はこれについてどうやって行くのか理解しようとしています。クライアントのすべての公開鍵の内容を通常のデータベースコレクションに格納する必要がありますか?
どのようにしてクライアントが実際に自分の証明書を自分のデータとともに「プレゼント」するのですか?私はclient-certificate-authのようないくつかのパッケージを見たことがありますが、これは私のユースケースのために役立つとは思わない。
EDIT:私はHTTPS(ポート443)を介して通信していますので、実際のセキュリティ部分を担当していると思います。私はちょうど不正な登録されていないクライアントがpub/private暗号化/ SSL証明書を使ってサーバにデータをプッシュしないようにしたい。
微妙なWeb暗号APIを使用する予定ですか?私はあなたが欲しいものを理解していると思います。私はあなたのための例を書くことができます...あなたは、JavaScriptで生成された秘密鍵をクライアントで秘密にし、公開鍵をサーバに安全に送信して保存したい... – TylerY86
認証時に、クライアントは公開鍵固有の識別子トークンによって識別される。次に、サーバーは、ユーザーの公開鍵で暗号化されたメッセージペイロードでチャレンジを発行します。ユーザーは自分の秘密鍵でメッセージを復号化し、正しく応答します。これは* no *セキュリティを提供します。すでに確立されているSSL接続でこれを実行する必要があります。伝統的なクッキーとセッショントークンの代わりに使用されています。秘密鍵は決してサーバに到着しません。 – TylerY86