さまざまな証明書を使用して 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 サイトの他の関連記事を参照してください。