Golang启用Https服务器测试

关于HTTPS的基础知识可以参考加密基础知识三 TLS/SSL HTTPS,先搞出来本地签名的证书啊,参考
如何用Golang在本地开启Https服务,首先用XCA
创建了证书并导出,很遗憾,失败了,我也没搞清原因,不过还是把过程记录下来吧……

一、失败的XCA创建过程

用XCA(X Certificate and key management)可视化程序管理SSL 证书(1)--安装XCA
用XCA(X Certificate and key management)可视化程序管理SSL 证书(2)--生成SSL证书请求
用XCA(X Certificate and key management)可视化程序管理SSL 证书(3)--创建自定义的凭证管理中心(Certificate Authority)
用XCA(X Certificate and key management)可视化程序管理SSL 证书(4)--用自定义的凭证管理中心(Certificate Authority)

1.去https://www.hohnstaedt.de/xca/下载后,安装

2.如果是第一次打开,请点击 File-->New Database,去存储证书

3.选择证书数据存储的位置并命名存储文件的名字。

4.设置密码保护证书数据,比如123456

5.鼠标点击到“Certificate Signing Request” 分页,并点击右边的“New Request”

6.source来源页签保持不变,用默认的模板即可。点击subject主体标签,输入证书的信息,比如内部名,组织名,组织单元名字,国家名,省份以及通用名字。一般内部名和通用名字填一样,而且通用名一般都需要填写,因为这个是用来标示当前证书在你的组织内部的唯一性;一般组织名和组织单元名一般和你的公司和部门相吻合,比如,你属于ibm的信息部(IT部门),那么你的组织名(organizationName)可以填写成:ibm,你的organizationUnitName可以填写成it,通用名(common name)和内部 名字取决你证书的用途,主要用来描述你证书的功能和用途的。我的这个例子中,只是我测试用的,所以我写成henrytest。


image.png

7.生成保护证书的秘钥:因为我们是生成证书请求,那么我们需要生成一个证书对,即私钥和共钥,上面步骤六生成的信息是在公钥中可以看到的,
(1) 如果这个证书将来会用到公网的服务器上去,那么这个证书请求需要发送到第三方得到权威机构(Certificate Authentication)进行签名,就好比我们需要把我们的户口本拿到当地公安局去办身份证一样,你可以拿这个身份证去买火车票,去办银行卡,第三方的机构承认,因为是公安局办的,是大家都承认的第三方权威机构办的,这时的公安局就相当于我们SSL证书的颁发机构,当前业界比较权威就是Thawte,Verisign公司等;

(2) 如果这个证书只是企业或者组织内部使用,一般用自己组织内部或者个人认可的证书中心去签名即可,我们会在下一个章节提到如何进行自签名,这就好比你那着你的劳动合同去公司申请工牌一样,你这个工牌只能在你组织或者公司内部使用,你不能拿你的工牌去做火车,道理一样的。

那么私钥是做什么的呢?私钥就是用来保护信息用的,因为我们一般把公钥告诉别人,让别人用我们的公钥去加密数据,然后不告诉别人我们的私钥,这样别人用我们的公钥加密的数据,只有我们自己能解密开,因为默认情况下,私钥只有我们自己知道;所以这个私钥一定要保护好,而且必须有密码器保护,这就是为什么我们在步骤四需要设置密码的原因了。

点击生成新密钥


image.png

8.在Subject主体标签,点击右下方OK,私钥和证书请求就都创建好了。


image.png

9.查看证书信息


image.png

10.查看私钥基本信息


image.png

11.选择Certificates 证书页签,点击新建证书,先不要点OK


image.png

切换到主体页签,这里和之前步骤一样,填写证书信息,创建私钥


image.png

切换到扩展页签注意,Type一定要选择为“Certificate Authority”,这样创建的此证书才能真正算是凭证管理中心的证书类型。同时,在这个页面也允许我们设置此证书的有效期限,默认情况下是以当前的时间为起点,在Time Range(时间范围)里面填上你希望的证书有效期限,默认单位为Year(年),你也可以根据你的需要设置成months(月),日(Days),在当前的例子中,我设置成10年。一定要点击后面的“Apply”*(应用)按钮,否则填入的数字不生效。
image.png

其他的标签页面配置保持不变,然后点击OK 按钮,自己的定义的凭证管理中心(Certificate Authority)就创建成功了。


image.png

12.点击“Certificate Signing Requests”标签页面中,选择你需要进行签名的证书请求
image.png

目前是未处理状态,这表示此证书还未被签名。选择需要签名的证书,并点击右键,在弹出的菜单中,选择“Sign”签发
image.png

13.把证书导出后,然后参考Google Chrome安装证书的方法,把证书安装到浏览器

image.png

14.使用以下程序来测试,失败了……

package main

import (
    "fmt"
    "net/http"
)

func hello(w http.ResponseWriter, r *http.Request) {
    fmt.Println(r.Proto) //打印http协议版本
    if _, err := w.Write([]byte("<h1>hello world,tom!</h1>")); err != nil {
        fmt.Println(err.Error())
    }
}

func main() {
    http.HandleFunc("/hello", hello)
    if err := http.ListenAndServeTLS(":8080", "./server.pem", "./server.key", nil); err != nil {
        fmt.Println(err.Error())
    }
}
二、使用OpenSSL来创建

这次参考看完这篇文章后还不会windows下生成自签名https安全证书的话,你就打死我表弟,在https://slproweb.com/products/Win32OpenSSL.html下载了win64版本

image.png

解压到了d:tool 目录下 然后进入OpenSSL-Win64的bin目录,双击openssl.exe进入命令行界面,输入下面命令

openssl genrsa -des3 -out server.key 2048

生成key文件,这里提示需要输入密码,直接输入123456就好了,ps:网上好多都是1024强度加密的,因为博客比较古老了,现在加密可以使用2048了
接下来就要使用key文件生成csr文件了
正常的CA认证我不了解,但是知道很贵,但是我这个因为是自己公司内网供内部使用的,所以使用了自签名
接着上面的命令行输入

openssl req -new -key server.key -out server.csr

这里会让你输入几个参数,参数说明

Country Name (2 letter code) [AU]:CN #国家
State or Province Name (full name) [Some-State]:Beijing #省
Locality Name (eg, city) []:Beijing #市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ncda #公司
Organizational Unit Name (eg, section) []:IT #部门
Common Name (e.g. server FQDN or YOUR name) []:localhost #域名 这里需要输入服务器的域名
Email Address []:kong.weisheng@nidec.com #邮箱

然后还要输入两个密码 这里输入123456就好 好记而且反正一会要删除

删除密码,如果不删除的话每次启动服务器都会让你输入密码,还是删了好,嗯,删了好

openssl rsa -in server.key -out server_no_passwd.key

这里需要输入之前的密码 我的是:123456

这时候,bin目录下应该多了server.key、server.csr、server_no_passwd.key 这三个文件了

接下来要生成自签名文件了,命令行继续输入

openssl x509 -req -days 365 -in server.csr -signkey server_no_passwd.key -out server.crt

这样,crt证书就生成好了,参照上文,安装到浏览器,拿Go代码再跑一次,又失败了……

三、在linux下跑openssl命令

这次是参考了一个视频【Golang-GIN】使用openssl生成证书并配置https http2.0,博主提供了命令:

openssl genrsa -out ./server.key 2048
openssl req -new -x509 -key ./server.key -out ./server.pem -days 365

我试了,还是不行。仔细观察一下,人家是在linux下跑的命令。
参考Win10搭建Linux子系统,在linux下重新生成证书,终于OK了!!

image.png

这里如果浏览器提示不安全,点继续即可
image.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容