golang GET 出现 x509: certificate signed by unknown authority
我们编写一个Go程序来尝试与这个HTTPS server建立连接并通信。
//gohttps/4-https/client1.go
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
resp, err := http.Get("https://localhost:8081")
if err != nil {
fmt.Println("error:", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
运行这个client,我们得到如下错误:
$go run client1.go
error: Get https://localhost:8081: x509: certificate signed by unknown authority
此时服务端也给出了错误日志提示:
2015/04/30 16:03:31 http: TLS handshake error from 127.0.0.1:62004: remote error: bad certificate
显然从客户端日志来看,go实现的Client端默认也是要对服务端传过来的数字证书进行校验的,但客户端提示:这个证书是由不知名CA签发 的!
我们可以修改一下client1.go的代码,让client端略过对证书的校验:
//gohttps/4-https/client2.go
package main
import (
"crypto/tls"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
client := &http.Client{Transport: tr}
resp, err := client.Get("https://localhost:8081")
if err != nil {
fmt.Println("error:", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
通过设置tls.Config的InsecureSkipVerify为true,client将不再对服务端的证书进行校验。执行后的结果 也证实了这一点:
$go run client2.go
Hi, This is an example of http service in golang!
最新文章
- How To Search and Restore files from Site Collection Recycle Bin
- HDU - 1875 畅通工程再续
- 使用sp_addextendedproperty添加描述信息
- 使用CURL下载远程文件保存到服务器
- nginx1.8+php5.6.10 服务器编译安装备忘2015-06
- JavaScript中几个可以转化为false的值
- JVM内存管理 (转)
- SQLite 附加数据库(http://www.w3cschool.cc/sqlite/sqlite-attach-database.html)
- linux 按文件大小排序
- IdentityServer4 实战文档
- laravel 解决session保存不了,取不出的问题
- Linux 操作 oracle 数据库
- /etc/sysconfig/network-scripts/下文件介绍
- Python_oldboy_自动化运维之路_函数,装饰器,模块,包(六)
- 【RF库Collections库测试】关键字append to list
- [转]NancyFx/Nancy
- 《C++反汇编与逆向分析技术揭秘》之十——析构函数
- Python程序员的10个常见错误(转)
- [学习笔记]FFT——快速傅里叶变换
- 怎样将Excel包含某字符的单元格填充颜色