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

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

王林
풀어 주다: 2024-02-06 09:36:03
앞으로
449명이 탐색했습니다.

如何从 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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿