如果客户端未验证所连接服务器的证书,则可能发生的“中间人”攻击的重要说明。
为避免可能的中间人攻击,在这种情况下,授权客户端会通过模拟服务器尝试连接到另一个客户端,请确保强制客户端执行某种服务器证书验证。当前有五种不同的方法可以完成此操作,按优先顺序列出:
- [OpenVPN 2.1及更高版本]使用特定密钥用法和扩展密钥用法来构建服务器证书。RFC3280确定应为TLS连接提供以下属性:
模式 | Key 用法 | Extended key 用法 |
---|---|---|
Client | digitalSignature数字签名 | TLS Web Client Authentication |
keyAgreement密钥协商 | ||
digitalSignature, keyAgreement | ||
Server | digitalSignature, keyEncipherment密钥加密 | TLS Web Server Authentication |
digitalSignature, keyAgreement |
您可以使用build-key-server 脚本来构建服务器证书 (有关更多信息,请参见 easy-rsa文档)。通过设置正确的属性,这会将证书指定为仅服务器证书。请将以下行添加到客户端配置:
remote-cert-tls server
- [OpenVPN 2.0及以下版本] 使用build-key-server 脚本构建服务器证书 ( 有关更多信息,请参见 easy-rsa文档)。通过设置nsCertType = server,这会将证书指定为仅服务器证书。请将以下行添加到客户端配置:
ns-cert-type server
这将阻止客户端连接到证书中缺少nsCertType = server名称的任何服务器 ,即使证书已由 OpenVPN配置文件中的ca文件签名也是如此.
- 在客户端上使用 tls-remote指令,可以基于服务器证书的通用名称来接受/拒绝服务器连接.
根据 嵌入式X509 的详细信息和服务器证书,发起一个自定义测试.来实现使用tls-verify脚本或插件,去接受/拒绝服务器连接。
- 使用一个CA签署服务器证书,并使用不同的CA签署客户端证书。客户端配置 ca 指令应引用服务器签名CA文件,而服务器配置 ca 指令应引用客户端签名CA文件。