x509: cannot validate certificate for xxx because it doesn't contain any IP SANs
x509,cannot,validate,certificate,for,xxx,because,it,doesn,contain,any,ip,sans
·
浏览次数 : 728
小编点评
## 解决 x509 错误方法:添加 SubjectAltNameclinet端
以下方法可以解决 x509 错误问题:
**方法一:不使用 IP SANs**
1. 修改 server 配置,添加 `subjectAltNameclinet端` 字段,例如:
```
subjectAltNameclinet端 = "your-domain.com"
```
2. 在 client 端设置 `InsecureSkipVerify` 为 `true`,例如:
```go
client := &http.Client{
Transport: &http.Transport{\
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
},
},
}
```
**方法二:通过修改 hosts 文件**
1. 将 `your-domain.com` 添加到 `hosts` 文件中,例如:
```
your-domain.com your-domain-name.com
```
2. 在 client 端设置 `InsecureSkipVerify` 为 `false`,例如:
```go
client := &http.Client{
Transport: &http.Transport{\
TLSClientConfig: &tls.Config{
InsecureSkipVerify: false,
},
},
}
```
**注意:**
* 使用方法一需要修改 server 配置,可能需要与服务器管理员合作。
* 使用方法二需要修改 client 端的设置,可能会影响安全。
* 使用方法二需要确保 `your-domain.com` 的域名注册在 DNS 中。
正文
项目中有时候需要访问https网站,但如果该网站使用的是自建证书,那client端验证server端证书时,有时候会报错:
x509: cannot validate certificate for xxx because it doesn't contain any IP SANs
碰到这种情况,可以使用下面的方法来解决:
- server端,在生成证书时添加subjectAltName
- clinet端,有两种方法:
- 不适用IP直接方法,通过修改hosts的方式进行域名映射
- 不进行https的双向验证,以go为例:
client := &http.Client{Transport: &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}}
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
与x509: cannot validate certificate for xxx because it doesn't contain any IP SANs相似的内容: