>  기사  >  백엔드 개발  >  golang tcp 핸드셰이크에서 clientCert.Subject.CommonName을 얻는 방법은 무엇입니까?

golang tcp 핸드셰이크에서 clientCert.Subject.CommonName을 얻는 방법은 무엇입니까?

王林
王林앞으로
2024-02-06 09:36:03383검색

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

질문 내용

다른 인증서를 사용하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제