golang中,SSL会话证书验证策略。
tls.Config结构体中的ClientAuth字段决定了客户端认证的要求。ClientAuth字段可以设置为以下几种策略之一:
- tls.NoClientCert: (默认值)不需要客户端证书。这意味着客户端连接到服务器时不需要提供任何证书,服务器不会对客户端进行身份验证。
- tls.RequestClientCert: 服务器请求客户端证书,但即使客户端没有提供证书,连接也可以继续。这是一种可选的客户端认证模式。
- tls.VerifyClientCertIfGiven: 类似于tls.RequestClientCert,但在客户端提供了证书的情况下,服务器会对证书进行验证。如果没有提供证书,则连接仍然可以继续。
- tls.RequireAndVerifyClientCert: 要求并且验证客户端证书。在这种模式下,客户端必须提供有效的证书,并且服务器将验证该证书。如果客户端未能提供有效的证书,则连接将被拒绝。
C语言中,SSL会话证书验证策略。
函数原型:
void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, SSL_verify_cb verify_callback);
mode参数有以下选项:
- SSL_VERIFY_NONE
----
服务端模式:服务端不会向客户端发送证书请求,所以客户端也不会发送证书给服务端;客户端模式:服务端发送的证书,无论验证结果成功还是失败,连接都将继续。 - SSL_VERIFY_PEER—-服务端模式:服务端会请求客户端发送证书,并验证客户端证书,验证失败则立即终止,并发出告警;客户端模式:验证服务端证书,验证失败则立即终止,并发出告警,而在使用匿名加密套件的情况下,不交换证书,会忽略。
- SSL_VERIFY_FAIL_IF_NO_PEER_CERT—-服务端模式:客户端没提供证书,立即终止。和SSL_VERIFY_PEER一起使用。客户端模式:忽略。
- SSL_VERIFY_CLIENT_ONCE—-服务端模式:只请求一次证书,重新协商密钥不再发送证书。和SSL_VERIFY_PEER一起使用。客户端模式:忽略。
- SSL_VERIFY_POST_HANDSHAKE—-服务端模式:服务端不会在初始握手期间请求客户端证书,而是通过SSL_verify_client_post_handshake()发送请求,这允许SSL握手之前设置SSL_CTX或SSL。和SSL_VERIFY_PEER一起使用。客户端模式:忽略。
发表回复