go 언어 HTTP server 에서 client 엔 드 인증서 의 내용 을 어떻게 검증 합 니까?
예 를 들 어 인증서 의 Subject 속성 을 가 져 오 는 방법 등 입 니 다.
package main
import (
"net/http"
"encoding/json"
)
func myHandler(w http.ResponseWriter, r *http.Request) {
if ! validRequest(r) {
res := map[string]string {"error": http.StatusText(http.StatusUnauthorized)}
b, _ := json.Marshal(res)
w.WriteHeader(http.StatusUnauthorized)
w.Header().Set("Content-Type", "application/json")
w.Write(b)
} else {
// normal call flow
...
}
}
func validRequest(r *http.Request) bool {
if r.TLS != nil {
for _, cert := range r.TLS.PeerCertificates {
if cert.IsCA == false {
// Do something with the cert, for example:
// signature := cert.Signature
// issuer := cert.Issuer
subject := cert.Subject
if subject.CommonName == "guest" {
return true
}
}
}
}
return false
}
이 예 에 서 는 Handler 함수 입구 에 validRequest 절 차 를 추가 하여 client 인증서 의 일부 속성 을 검증 합 니 다.예 를 들 어 Subject 의 Common Name 이 guest 인지 아 닌 지 검증 합 니 다.그렇지 않 으 면 잘못 보고 합 니 다.
인증서 의 상세 한 내용 자 료 는 참고 하 시기 바 랍 니 다.https://golang.org/pkg/crypto/x509/#Certificate
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.