Golang代码实现HTTPs

Posted pu369

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang代码实现HTTPs相关的知识,希望对你有一定的参考价值。

在win7下试试:

1.实现一个最简单的HTTPS Web Server

// gohttps/2-https/server.go
package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w,
        "Hi, This is an example of https service in golang!")
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServeTLS(":8081", "server.crt",
                           "server.key", nil)
}

上述代码无法正常运行,因为没有server.crt和server.key

2、安装openssl

2.1可到http://slproweb.com/products/Win32OpenSSL.html下载Win64 OpenSSL v1.1.0j。好像该地址应该可以下载Visual C++ 2008Redistributables (x64)的  但是我没找到。直接安装下载的  Win64 OpenSSL v1.1.0j

注:我是直接下载安装了,略过了下面的2.2和2.3

2.2下载Openssl源码,去官网http://www.openssl.org/下载openssl-1.1.0j.tar.gz即可。

 解压openssl-1.0.1j.tar.gz,找到openssl-1.0.1japps目录,拷贝demoCA目录和openssl.cnf文件到Openssl的安装目录下的bin目录下(即D:OpenSSL-Win64in)。

2.3、在D:OpenSSL-Win64in目录下,创建ca、jks、server、client四个目录。 

3、生成 server.key和server.crt

3.1 生成 server.key

openssl genrsa -out server.key 2048

注:因为懒得加环境变量,我是在D:OpenSSL-Win64in目录下执行的openssl

3.2生成 server.crt

openssl req -new -x509 -key server.key -out server.crt -days 3650

按照给出的提示依次输入:CN  BJ   等,如下:

-----

Country Name (2 letter code) [AU]:CN

State or Province Name (full name) [Some-State]:BJ

Locality Name (eg, city) []:BJ

Organization Name (eg, company) [Internet Widgits PtyLtd]:ple

Organizational Unit Name (eg, section) []:live

Common Name (eg, YOUR name) []:root

Email Address []:
---------------------

4.将生成的server.crt和server.key剪切复制到第一步的go程序所在目录,运行go程序

5.打开chrome浏览器访问  localhost:8081

什么?竟然提示该网页无法正常运作!

哦,低级错误,应该访问:https://localhost:8081

又提示“您的连接不是私密连接”,忽略,终于显示Hi, This is an example of https service in golang!

也算是基本打通了https。

然而,浏览器地址栏上大大的红色“不安全”字样看着不舒服。怎么办?

办法1:花钱申请证书或免费证书

办法2:自签证书,在客户端,将证书导入到“受信任的根证书颁发机构”存储区中

另外,还可以双向验证。

可参考下面连接,时间关系暂写到这里。

 

参考:https://segmentfault.com/a/1190000013287122

https://segmentfault.com/a/1190000009666888

https://segmentfault.com/a/1190000016249967

https://blog.csdn.net/zhaotengfei36520/article/details/41962077

https://studygolang.com/articles/9267

https://studygolang.com/articles/9959

https://blog.51cto.com/colinzhouyj/1566438

https://blog.csdn.net/luyangbin01/article/details/50972693

以上是关于Golang代码实现HTTPs的主要内容,如果未能解决你的问题,请参考以下文章

golang代码片段(摘抄)

golang goroutine例子[golang并发代码片段]

Golang代码实现HTTPs

golang删除数组某个元素

『GCTT 出品』用不到 100 行的 Golang 代码实现 HTTP(S) 代理

golang 片段7 for https://medium.com/@francesc/why-are-there-nil-channels-in-go-9877cc0b2308