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 goroutine例子[golang并发代码片段]
『GCTT 出品』用不到 100 行的 Golang 代码实现 HTTP(S) 代理
golang 片段7 for https://medium.com/@francesc/why-are-there-nil-channels-in-go-9877cc0b2308