特定のホストにTLS / SSLクライアント認証を使用する

dhcgn:

julienschmidtによるhttprouterなどのリバースプロキシを使用しているときに、特定のホストにTLS / SSLクライアント認証を使用するにはどうすればよいですか?

でグローバルな問題にクライアント証明書を設定できましたhttp.DefaultTransport

transport := &http.Transport{
    TLSClientConfig: &tls.Config{
        Certificates: []tls.Certificate{cert},
    },
}

http.DefaultTransport = transport

ただし、次のような特定のホストに対してのみクライアント証明書を使用したい場合

  1. host1のcert1
  2. host2のcert2
  3. クライアント証明書のないその他すべて

更新

コールバックGetConfigForClientHandlerまたはコールされることを期待していましたGetCertificateHandlerこの時点で、に反応することができましたinfo.ServerNameただしGetClientCertificate、ターゲットに関する情報なしで呼び出されるだけですinfo.ServerName

func main() {
    transport := &http.Transport{
        TLSClientConfig: &tls.Config{
            GetConfigForClient:   GetConfigForClientHandler,
            GetClientCertificate: GetClientCertificateHandler,
            GetCertificate:       GetCertificateHandler,
        },
    }

    http.DefaultTransport = transport

    // Host which enforce client certificate authentication
    resp, err := http.Get("https://example.com")
    if err != nil {
        fmt.Println("Error", err)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    fmt.Println(string(body))
}

func GetClientCertificateHandler(info *tls.CertificateRequestInfo) (*tls.Certificate, error) {
    fmt.Println("GetClientCertificateHandler")
    panic("GetClientCertificateHandler")
}

func GetConfigForClientHandler(info *tls.ClientHelloInfo) (*tls.Config, error) {
    fmt.Println("GetConfigForClientHandler for:", info.ServerName)
    panic("GetConfigForClientHandler")
}

func GetCertificateHandler(info *tls.ClientHelloInfo) (*tls.Certificate, error) {
    fmt.Println("GetCertificateHandler for:", info.ServerName)
    panic("GetCertificateHandler")
}
ジュリアン・シュミット:
  1. すべてのホストで共有されるTLS構成を作成します。おそらく、そこに多くを設定する必要はありません。しかし、Config.GetConfigForClientハンドラを設定したいとします
  2. そのハンドラーでを確認しClientHelloInfo.ServerNameます。それが要求されたホストです。次に、TLS構成を変更して、そこでクライアント認証を要求します(Config.ClientAuth)。
  3. net.Listenerを tls.NewListener
  4. TLS net.Listener使用しますhttp.Serve(ここでhttprouterを使用できます)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

OpenSSLを使用したSSL / TLSクライアント認証のテスト

分類Dev

Java:SSLクライアント側認証を追加する方法

分類Dev

golang相互TLS認証で特定のクライアントを信頼する

分類Dev

クライアント証明書の認証目的でSSL証明書を使用できますか?

分類Dev

同じホストのJavaで複数のSSLクライアント証明書を使用する

分類Dev

WebサービスへのCXFクライアントでTLS / SSL Http認証をどのように使用しますか?

分類Dev

GoでTLSクライアント認証を使用するテストサーバーを作成する方法

分類Dev

Java-クライアント証明書認証を使用すると、SSLストリームがキャンセルされます

分類Dev

クライアントSSL証明書を無効にする

分類Dev

IntelliJ Restクライアント:REST呼び出しでクライアントSSL証明書を使用する

分類Dev

自己署名証明書を使用するJava SSL / httpsクライアント

分類Dev

.NetCoreでクライアントSSL証明書を使用する方法

分類Dev

さまざまなSSLクライアント認証証明書を使用してApache HttpClientのプールを作成する方法

分類Dev

GCE Goクライアントのoauth2認証を使用して自動認証を実現する方法

分類Dev

Java11クライアント間で認証する方法-MongoDB4.4(SSL)?

分類Dev

クライアント認証証明書を使用してFTPS接続をセットアップする

分類Dev

クライアント証明書を使用してWeb APIで認証および承認する方法

分類Dev

クライアント証明書を使用してWeb APIで認証および承認する方法

分類Dev

JavaEEでJavaFXクライアントを認証する方法

分類Dev

クライアント認証にAADを使用するには、引き続き証明書が必要です

分類Dev

ユーザー認証を使用して特定のクライアントのAPIを保護する

分類Dev

Websphere MQクライアントのクライアント証明書でSSLを有効にする方法は?

分類Dev

アラートウィンドウ認証を使用してサイトをスクレイピングする

分類Dev

ServiceStackの証明書を使用してクライアントを認証する方法は?

分類Dev

相互認証証明書を使用するWCFWebサービスがクライアントチェーンの信頼の検証に失敗する

分類Dev

EvolutionでTLSクライアント証明書認証を有効にする方法は?

分類Dev

認証用のクライアント証明書を要求する

分類Dev

認証にクライアント証明書を必要とするURLをリクエストする方法

分類Dev

クライアントモードのOpenSSL:認証を確認する

Related 関連記事

  1. 1

    OpenSSLを使用したSSL / TLSクライアント認証のテスト

  2. 2

    Java:SSLクライアント側認証を追加する方法

  3. 3

    golang相互TLS認証で特定のクライアントを信頼する

  4. 4

    クライアント証明書の認証目的でSSL証明書を使用できますか?

  5. 5

    同じホストのJavaで複数のSSLクライアント証明書を使用する

  6. 6

    WebサービスへのCXFクライアントでTLS / SSL Http認証をどのように使用しますか?

  7. 7

    GoでTLSクライアント認証を使用するテストサーバーを作成する方法

  8. 8

    Java-クライアント証明書認証を使用すると、SSLストリームがキャンセルされます

  9. 9

    クライアントSSL証明書を無効にする

  10. 10

    IntelliJ Restクライアント:REST呼び出しでクライアントSSL証明書を使用する

  11. 11

    自己署名証明書を使用するJava SSL / httpsクライアント

  12. 12

    .NetCoreでクライアントSSL証明書を使用する方法

  13. 13

    さまざまなSSLクライアント認証証明書を使用してApache HttpClientのプールを作成する方法

  14. 14

    GCE Goクライアントのoauth2認証を使用して自動認証を実現する方法

  15. 15

    Java11クライアント間で認証する方法-MongoDB4.4(SSL)?

  16. 16

    クライアント認証証明書を使用してFTPS接続をセットアップする

  17. 17

    クライアント証明書を使用してWeb APIで認証および承認する方法

  18. 18

    クライアント証明書を使用してWeb APIで認証および承認する方法

  19. 19

    JavaEEでJavaFXクライアントを認証する方法

  20. 20

    クライアント認証にAADを使用するには、引き続き証明書が必要です

  21. 21

    ユーザー認証を使用して特定のクライアントのAPIを保護する

  22. 22

    Websphere MQクライアントのクライアント証明書でSSLを有効にする方法は?

  23. 23

    アラートウィンドウ認証を使用してサイトをスクレイピングする

  24. 24

    ServiceStackの証明書を使用してクライアントを認証する方法は?

  25. 25

    相互認証証明書を使用するWCFWebサービスがクライアントチェーンの信頼の検証に失敗する

  26. 26

    EvolutionでTLSクライアント証明書認証を有効にする方法は?

  27. 27

    認証用のクライアント証明書を要求する

  28. 28

    認証にクライアント証明書を必要とするURLをリクエストする方法

  29. 29

    クライアントモードのOpenSSL:認証を確認する

ホットタグ

アーカイブ