다른 인증서를 사용하여 TLS TCP 엔드포인트에 연결하는 클라이언트가 많습니다. RequireAndVerifyClientCert
:
그래서 어떤 서버 인증서와 키를 사용할지 알려주기 전에 ConnectionState().PeerCertificates[0]
并首先读取 clientCert.Subject.CommonName
에 액세스할 수 있습니다. 즉, 각 CommonName 인증서에는 서로 다른 서버측 인증서와 키가 필요합니다. 모든 연결에 사용되는 하나의 서버 인증서와 키가 아닙니다.
그러나 이 변환은 실패합니다. (*tls.Conn)
并且我无法调用 ConnectionState
或者我进行另一个 tcp.Server 调用,但 len(PeerCertificates)
는 0입니다. 나는 시도했다:
GetConfigForClient: func(hello *tls.ClientHelloInfo) (*tls.Config, 错误) {
tls.RequireAndVerifyClientCert
또는 기타 항목으로 전달하지만 *tls.ClientHelloInfo에는 필요한 정보가 없습니다.
클라이언트 인증서에 따라 어떤 서버 인증서를 사용할지 결정할 수 있는 방법은 없습니다.
TLS 핸드셰이크에서는 서버가 먼저 서버 인증서를 보낸 다음 클라이언트 인증서를 요청하고 그 후에만 클라이언트가 클라이언트 인증서를 서버에 보냅니다.
위 내용은 golang tcp 핸드셰이크에서 clientCert.Subject.CommonName을 얻는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!