在win7下试试:

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

// gohttps/2-https/server.go
package mainimport ("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.1j\apps目录,拷贝demoCA目录和openssl.cnf文件到Openssl的安装目录下的bin目录下(即D:\OpenSSL-Win64\bin\)。

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

3、生成 server.key和server.crt

3.1 生成 server.key

openssl genrsa -out server.key 2048

注:因为懒得加环境变量,我是在D:\OpenSSL-Win64\bin目录下执行的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:自签证书,在客户端,将证书导入到“受信任的根证书颁发机构”存储区中

另外,还可以双向验证。

补充:

6.符合Chrome58+的证书制作(费了不少劲)

首先设置windows环境变量,我的是 D:\OpenSSL-Win64\bin
主要参考了https://blog.csdn.net/wdydxf/article/details/54576063,可能是openssl版本不同,稍做修改。如不明白,请看原文
下面的操作, 我将建立一个 MyRootCA 的根证书颁发机构, 然后为一个域名是 myserver.com 签发证书

6.1将 C:\OpenSSL-Win64\bin\openssl.cfg 复制到 F:\SSLTest\, 并在F:\SSLTest\执行以下命令

mkdir demoCA\private demoCA\newcerts
type nul > demoCA\index.txt
echo 01 > demoCA\serial

6.2生成CA自签名证书

openssl req -new -x509 -newkey rsa:2048 -days 3650 -keyout demoCA\private\MyRootCA.key -out demoCA\MyRootCA.crt -passout pass:123456 -config openssl.cnf

依次输入 CN bj0 bj1 bj2 MyRootCA 空(回车)

6.3生成用户的 RSA 密钥对

openssl genrsa -des3 -out myserver.com._has_passwd.key -passout pass:123456

6.4 删除私钥中的密码(否则golang程序无法启动)

openssl rsa -in myserver.com._has_passwd.key -out myserver.com.key

6.5生成用户证书请求

openssl req -new -days 1825 -key myserver.com.key -out myserver.com.csr -config openssl.cnf

依次输入 123456 CN bj0 bj1 bj2 bjbj myserver.com 空(回车) 空(回车) 空(回车)(注意与6.2的相关输入内容保持一样)

6.6使用 CA 签发用户证书

openssl ca -in myserver.com.csr -out myserver.com.crt -cert demoCA\MyRootCA.crt -keyfile demoCA\private\MyRootCA.key -extensions v3_req -config openssl.cnf

依次输入 123456 y y

6.7验证
在C:\Windows\System32\drivers\etc\hosts中新增一行

127.0.0.1 myserver.com

然后将 MyRootCA.crt 安装到 受信任的根证书颁发机构

将myserver.com.crt和myserver.com.key放到golang源代码目录下

访问:https://myserver.com:8081/
终于显示连接是安全的了。

 补充:有的源码不是用.crt 和.key格式的证书和私钥,而都是用.pem后缀的。有的说法是.crt后缀可直接改为.pem,而.key可以转换格式,

如:openssl rsa -in id_rsa -text > private.pem   。

但我没有测试。

重点来了

 自签名不推荐,自己是自己拥有域名的话,直接去腾讯云签一个时长一年的专业CA机构签发的dv类型证书就完事了

https://cloud.tencent.com/product/ssl

还有这里https://wzfou.com/letsencrypt/和https://www.cnblogs.com/tv151579/p/8268356.html介绍的:letsencrypt免费SSL证书

 最后,听说go https 在速度上不如Nginx + go http 方式

参考: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

https://blog.csdn.net/sunhuansheng/article/details/82902185

https://blog.csdn.net/mixika99/article/details/79009521

https://blog.csdn.net/huplion/article/details/52892869

https://douhan.li/?p=79

https://www.cnblogs.com/274914765qq/p/4672108.html

https://blog.csdn.net/c_base_jin/article/details/81229643

http://www.mamicode.com/info-detail-1938899.html

https://blog.csdn.net/wdydxf/article/details/54576063

https://blog.csdn.net/qq_37049781/article/details/84837342

转载于:https://www.cnblogs.com/pu369/p/10748684.html

Golang代码实现HTTPs(HTTPS证书生成和部署)相关推荐

  1. java加密证书生成_mkcert 1.3.0 发布,本地 HTTPS 加密证书生成工具

    mkcert 是一个生成本地 HTTPS 加密证书的工具,一个命令就可以生成证书,不需要任何配置. 使用示例 $ mkcert -install Created a new local CA at & ...

  2. 将https安全证书导入jdk中

    添加https安全证书 添加https安全证书 生成证书 导出证书 将证书导入jdk中 查看添加到jdk中的所有证书 添加https安全证书 以下是我在linux上安装mysql5.7版本的步骤以及遇 ...

  3. TLS/HTTPS 证书生成与验证

    https://www.cnblogs.com/kyrios/p/tls-and-certificates.html 最近在研究基于ssl的传输加密,涉及到了key和证书相关的话题,走了不少弯路,现在 ...

  4. https ssl单项认证和双向认证以及证书生成

    HTTP(HyperText Transfer Protocol,超文本传输协议)被用于在Web浏览器和网站服务器之间传递信息,在TCP/IP中处于应用层.这里提一下TCP/IP的分层共分为四层:应用 ...

  5. 转载:Openssl生成rsa和椭圆曲线加密公钥密钥创建根ca签名https服务器证书签名...

    转载:Openssl生成rsa和椭圆曲线加密公钥密钥创建根ca签名https服务器证书签名 Openssl生成rsa和椭圆曲线加密公钥密钥创建根ca签名https服务器证书签名 July 20, 20 ...

  6. Let's Encrypt证书生成,certbot-auto 生成ssl通用证书 配置https 自动续期

    Let's Encrypt是一个 CA 机构,但这个 CA 机构是免费的!!!签发证书不需要任何费用, 为了实现通配符证书,Let's Encrypt 对 ACME 协议的实现进行了升级,只有 v2 ...

  7. HTTPS原理与证书生成

    原文链接: HTTPS原理与证书生成 HTTPS HTTPS与HTTP是什么关系呢?我们可以对比下HTTP与HTTPS的请求过程: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 ...

  8. 今日写代码遇到的https请求的时候,提示ssl证书错误

    关于SSL证书,有两种方法: 第一种:可以直接下载,具体的操作步骤大家可以百度走一波. 第二种:直接用代码屏蔽掉证书,代码亲测. import org.slf4j.Logger; import org ...

  9. 本地ca,以及根证书的生成,服务器证书生成,nginx https配置等

    环境: centos7.6 参考: https://blog.51cto.com/liuzhengwei521/2120535?utm_source=oschina-app 工具: 和openssl是 ...

最新文章

  1. linux学习治疗,这时代,医生都用VR帮你看病了!
  2. InfoQ专访:人工智能时代,什么才是你的最大竞争力?
  3. fortigate的RADIUS域用户的组认证为SSL×××用户(上)
  4. 计算机新增桌面的路径,自动更改Windows新建用户桌面文件默认路径修改
  5. 递归 —— 作为全局变量 vs 作为参数
  6. HCIE Security 双机热备 备考笔记(幕布)
  7. 制作数据集---labelImg和labelme
  8. 杰出的橙色网站设计案例
  9. Facebook团队提供人工智能视频教程:机器学习入门教程指南
  10. Python+旧衣物捐赠系统 毕业设计-附源码290942
  11. [31期]上班这点事
  12. 利用公有云cvm 公网IP实现内网穿透,远程登录内网服务器
  13. Python爬取京东商品评论
  14. Express搭建服务器
  15. div+CSS实现段落首行缩进两个字符(text-indent标签)
  16. 2019经济寒冬,软件定制开发公司的竞争力在哪里??
  17. 三门问题的计算机模拟,三门问题和 JavaScript 仿真实验
  18. 怎样快速实现整篇文档中英互译?这里有简单的方法
  19. html5 拍照 苹果手机黑屏,苹果手机拍照黑屏怎么办?iphone拍照黑屏的解决办法...
  20. 一文带你全面体验八种状态管理库

热门文章

  1. 显卡mx150和230哪个好_MX250显卡等于GTX1050?笔记本显卡MX250和MX150的区别对比
  2. mac地址修改_优酷路由宝救砖时MAC和无线参数及SN恢复方法
  3. oracle索引块和数据块,Oracle中,如何确定热快是数据块还是索引快?
  4. 如何将两个集合合并_如何将剪切的音频文件进行合并
  5. linux php oracle 乱码,Linux下Oraclesqlplus中文显示乱码的问题的解决
  6. PHP的CI框架学习
  7. RSA加密算法详解以及RSA在laravel中的应用
  8. python【力扣LeetCode算法题库】1162- 地图分析(BFS)
  9. 箱形图适用于哪种数据_盘点 | 十分钟进阶Excel数据可视化
  10. java irowset行数,Java CloneableRecord.put方法代码示例