在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.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 

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

3.2生成 server.crt

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

按照给出的提示依次输入: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 > demoCA\serial

6.2生成CA自签名证书

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

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

6.3生成用户的 RSA 密钥对

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

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

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

6.5生成用户证书请求

openssl req -new -days  -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

Golang代码实现HTTPs(HTTPS证书生成和部署)的更多相关文章

  1. mkcert本地 HTTPS 加密证书生成工具

    软件介绍: mkcert 是一个生成本地 HTTPS 加密证书的工具,一个命令就可以生成证书,不需要任何配置. 下载地址: https://github.com/FiloSottile/mkcert/ ...

  2. apache https 双向证书生成

    Https分单向认证和双向认证 单向认证表现形式:网站URL链接为https://xxx.com格式 双向认证表现心事:网站URL链接为https://xxx.com格式,并且需要客户端浏览器安装一个 ...

  3. Https:证书生成 .p12 .keyStore 和 .truststore文件理解

    当我们需要SSL证书时,可以自动生成SSL证书,但是每个系统都申请一次证书会比较麻烦,所以用到了如下几个文件格式:   .p12(PKCS #12) 我们的每一个证书都可以生成一个.p12文件,这个文 ...

  4. [svc]HTTPS证书生成原理和部署细节

    参考: http://www.barretlee.com/blog/2015/10/05/how-to-build-a-https-server/ 今天摸索了下 HTTPS 的证书生成,以及它在 Ng ...

  5. Windows下Nginx配置SSL实现Https访问(包含证书生成)

    Vincent.李   Windows下Nginx配置SSL实现Https访问(包含证书生成) Windows下Nginx配置SSL实现Https访问(包含证书生成) 首先要说明为什么要实现https ...

  6. HTTPS证书生成原理和部署细节

    看看下面,部分电信用户访问京东首页的时候,会看到右下角有一个浮动广告: 小白用户以为是京东有意放置的,细心的用户会发现,这个 iframe 一层嵌一层的恶心广告很明显是电信/中间人通过 DNS 劫持注 ...

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

    最近在研究基于ssl的传输加密,涉及到了key和证书相关的话题,走了不少弯路,现在总结一下做个备忘 科普:TLS.SSL.HTTPS以及证书 不少人可能听过其中的超过3个名词,但它们究竟有什么关联呢? ...

  8. Tomcat配置https之 JDK SSL证书生成与验证

    关于证书 SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socket layer(SSL),安全协议是由Netscape Communication公司设计开发. ...

  9. 微信支付HTTPS服务器证书验证指引

    1. 背景介绍 2. 常见问题 3. 验证证书 4. 安装证书 背景介绍 微信支付使用HTTPS来保证通信安全, 在HTTPS服务器上部署了由权威机构签发的证书, 用于证明微信支付平台的真实身份. 商 ...

随机推荐

  1. 你在为谁工作——IT帮深圳分站2019年3月线下活动回顾

    对于工作,在每个人的心中,它所占的份量都是不一样的.有的人活着是为了工作,有的人工作是为了更好的生活. 在3月24日下午,北京.上海与深圳三地我们同步举办了关于工作这个话题的沙龙活动. 我们深圳分站参 ...

  2. 视频直播 object 标签属性详解

    最近在做视频直播这一块的,html5的video不能实现此功能,在网上查找了资料,觉得很有用. 一.介绍: 我们要在网页中正常显示flash内容,那么页面中必须要有指定flash路径的标签.也就是OB ...

  3. Python 进度条显示

    运行工具:Pycharm, import timescale = 50print("开始执行".center(scale//2,"-")) start = ti ...

  4. 与其争论java和.net的差别,还不如多想点用编程技术挣钱的方式

    年前和最近,我发现在博客园和其它地方,有不少争论java和.net哪个好的文章,其实这是种好现象.虽然到了架构层面,技术是通用的,但兼听则明,而且技多不压身,多种挣钱的方式总不会错. 本人最近主攻Ja ...

  5. 爸爸又给Spring MVC生了个弟弟叫Spring WebFlux

    情景引入 很早之前,Java就火起来了,是因为它善于开发和处理网络方面的应用. Java有一个爱好,就是喜欢制定规范标准,但自己又不善于去实现. 反倒是一些服务提供商使用它的规范标准来制造应用服务器而 ...

  6. ES6躬行记(21)——类的继承

    ES6的继承依然是基于原型的继承,但语法更为简洁清晰.通过一个extends关键字,就能描述两个类之间的继承关系(如下代码所示),在此关键字之前的Man是子类(即派生类),而在其之后的People是父 ...

  7. java基础(五):谈谈java中的多线程

    1.多线程 1.1.多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一 ...

  8. 1.Memcached 中文文档 - 概论(译官方文档)

    原文地址:memcached手册     https://github.com/memcached/memcached/wiki/Overview 简介 Free & open source, ...

  9. 关于jQuery中的选择器

    1:选择器的作用 获取网页的上面的标签元素等等,然后对他进行一些列的操作(添加样式,添加行为...) 2:选择器有哪些 基本选择器,层次选择器,过滤选择器,表单选择器 一:基本选择器 基本选择器是jq ...

  10. unity transform 常用操作

    1.寻找物体 1.1 寻找满足条件的子物体 ` public static Transform FindObj(Transform transform, Func<Transform, bool ...