ホームページ  >  記事  >  バックエンド開発  >  golang tcpハンドシェイクからclientCert.Subject.CommonNameを取得するにはどうすればよいですか?

golang tcpハンドシェイクからclientCert.Subject.CommonNameを取得するにはどうすればよいですか?

王林
王林転載
2024-02-06 09:36:03388ブラウズ

如何从 golang tcp 握手中获取 clientCert.Subject.CommonName?

質問の内容

さまざまな証明書を使用して TLS TCP エンドポイントに接続するクライアントが多数あります。 RequireAndVerifyClientCert:

を使用しようとしています リーリー

したがって、どのサーバー証明書とキーを使用するかを指示する前に、 ConnectionState().PeerCertificates[0] にアクセスし、最初に clientCert.Subject.CommonName を読み取ることができます。つまり、各 CommonName 証明書には、異なるサーバー側の証明書とキーが必要です。すべての接続に 1 つのサーバー証明書とキーが使用されるだけではありません。

リーリー

しかし、この変換は失敗します: (*tls.Conn)ConnectionState を呼び出すことができません。または、別の tcp.Server 呼び出しを行いますが、len(PeerCertificates)はゼロです。以前試したことがあります:

GetConfigForClient: func(hello *tls.ClientHelloInfo) (*tls.Config, エラー) {

tls.RequireAndVerifyClientCert またはそれ以外に渡しますが、*tls.ClientHelloInfo には必要な情報がありません。


正解


クライアント証明書に基づいてどのサーバー証明書を使用するかを決定する方法はありません。

TLS ハンドシェイクでは、サーバーは最初にサーバー証明書を送信し、次にクライアント証明書を要求します。その後、クライアントはクライアント証明書をサーバーに送信します。

以上がgolang tcpハンドシェイクからclientCert.Subject.CommonNameを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。