我们编写一个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!

最新文章

  1. How To Search and Restore files from Site Collection Recycle Bin
  2. HDU - 1875 畅通工程再续
  3. 使用sp_addextendedproperty添加描述信息
  4. 使用CURL下载远程文件保存到服务器
  5. nginx1.8+php5.6.10 服务器编译安装备忘2015-06
  6. JavaScript中几个可以转化为false的值
  7. JVM内存管理 (转)
  8. SQLite 附加数据库(http://www.w3cschool.cc/sqlite/sqlite-attach-database.html)
  9. linux 按文件大小排序
  10. IdentityServer4 实战文档
  11. laravel 解决session保存不了,取不出的问题
  12. Linux 操作 oracle 数据库
  13. /etc/sysconfig/network-scripts/下文件介绍
  14. Python_oldboy_自动化运维之路_函数,装饰器,模块,包(六)
  15. 【RF库Collections库测试】关键字append to list
  16. [转]NancyFx/Nancy
  17. 《C++反汇编与逆向分析技术揭秘》之十——析构函数
  18. Python程序员的10个常见错误(转)
  19. [学习笔记]FFT——快速傅里叶变换
  20. 怎样将Excel包含某字符的单元格填充颜色

热门文章

  1. 微信公众号中ip白名单用谁的ip
  2. Win7如何解决telnet不是内部或外部命令的方案!听语音
  3. Varnish的vcl子程序
  4. Linuxc - 操作系统内存分配
  5. BSA Network Shell系列-runcmd/runscript命令
  6. Asp.net core 2.0.1 Razor 的使用学习笔记(三)
  7. Centos7搭建zookeeper集群
  8. JavaScript 函数创建思想
  9. android 中string.xml中的%1$s
  10. js给页面添加滚动事件并判断滚动方向