大概写点备忘
在进行基于TLS/SSL的以太网通讯时,有关证书遵循如下规则:
在设置证书校验模式时
今天介绍一下SSL双向认证服务器端认证模式的设置,很关键。
初始化ssl时,要使用SSL_CTX_set_verify函数设置验证模式,下面介绍下集中模式:
OpenSSL 验证证书模式
OpenSSL 有四种验证证书的模式,这样可以自己根据验证结构来决定应用程序的行为。四种验证模式分别是:
SSL_VERIFY_NONE:完全忽略验证证书的结果。当握手必须完成的话,就选中这个选项。其实真正有证书的人很少,尤其是在中国,那么如果 SSL 运用于一些免费的服务,比如 EMAIL 的时候,SERVER 端最好采用这个模式。
SSL_VERIFY_PEER:希望验证对方的证书。这个是最一般的模式。对 CLIENT 来说,如果设置了这样的模式,验证SERVER的证书出了任何错误,SSL 握手都告吹。对 SERVER 来说,如果设置了这样的模式,CLIENT 倒不一定要把自己的证书交出去。如果 CLIENT 没有交出证书,SERVER 自己决定下一步怎么做。
SSL_VERIFY_FAIL_IF_NO_PEER_CERT:这是 SERVER 使用的一种模式,在这种模式下, SERVER 会向 CLIENT 要证书。如果 CLIENT 不给,SSL 握手告吹。
SSL_VERIFY_CLIENT_ONCE: 这是仅能使用在 SSL SESSION RENEGOTIATION 阶段的一种方式。如果不是用这个模式的话,那么在 RENEGOTIATION 的时候,CLIENT 都要把自己的证书送给 SERVER,然后做一番分析。这个过程很消耗 CPU 时间的,而这个模式则不需要 CLIENT 在 RENEGOTIATION 的时候重复送自己的证书了。
————————————————
版权声明:本文为CSDN博主「enjoy嚣士」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013919153/article/details/78616737
当选择SSL_VERIFY_NONE时,可以不调用CA根证书设置和加载
SSL_CTX_load_verify_locations (ctx, CACERT, NULL);
因为不需要验证双方证书,自然也就不需要CA根证书了。(此处是我的个人理解,希望共同讨论)
注意:这里虽然不验证对方证书,但是通讯还是加密的,客户端用的是服务器证书所带的公钥来完成随机数的加密(握手阶段服务器器发自己的证书给客户端,只是证书不被校验罢了),后续通讯中则使用基于该随机数的对称加密算法。
当选择SSL_VERIFY_PEER时,必须要调用CA根证书设置和加载(此处是我的个人理解,希望共同讨论)
SSL_CTX_load_verify_locations (ctx, CACERT, NULL);
因为要验证对方证书必须要有签发对方证书的CA证书
且还需要调用
/加载自身证书/
SSL_CTX_use_certificate_file (ctx, MYCERTF, SSL_FILETYPE_PEM)
/加载自身私钥/
SSL_CTX_use_PrivateKey_file (ctx, MYKEYF, SSL_FILETYPE_PEM)
/验证自身私钥和证书是否匹配/
SSL_CTX_check_private_key (ctx)
参考博客园博主欢跳的心文章https://www.cnblogs.com/etangyushan/p/3679457.html