go 언어 HTTP server 에서 client 엔 드 인증서 의 내용 을 어떻게 검증 합 니까?

이전 글'go 언어 가 양 방향 TLS 인증 을 실현 하 는 REST Service'에 서 는 client 와 server 엔 드 간 양 방향 TLS 인증 을 어떻게 실현 하 는 지,여기 서 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

좋은 웹페이지 즐겨찾기