美文网首页
Golang启用Https服务器测试

Golang启用Https服务器测试

作者: 合肥黑 | 来源:发表于2021-03-20 22:09 被阅读0次

关于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

相关文章

网友评论

      本文标题:Golang启用Https服务器测试

      本文链接:https://www.haomeiwen.com/subject/usepcltx.html