关于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。
7.生成保护证书的秘钥:因为我们是生成证书请求,那么我们需要生成一个证书对,即私钥和共钥,上面步骤六生成的信息是在公钥中可以看到的,
(1) 如果这个证书将来会用到公网的服务器上去,那么这个证书请求需要发送到第三方得到权威机构(Certificate Authentication)进行签名,就好比我们需要把我们的户口本拿到当地公安局去办身份证一样,你可以拿这个身份证去买火车票,去办银行卡,第三方的机构承认,因为是公安局办的,是大家都承认的第三方权威机构办的,这时的公安局就相当于我们SSL证书的颁发机构,当前业界比较权威就是Thawte,Verisign公司等;
(2) 如果这个证书只是企业或者组织内部使用,一般用自己组织内部或者个人认可的证书中心去签名即可,我们会在下一个章节提到如何进行自签名,这就好比你那着你的劳动合同去公司申请工牌一样,你这个工牌只能在你组织或者公司内部使用,你不能拿你的工牌去做火车,道理一样的。
那么私钥是做什么的呢?私钥就是用来保护信息用的,因为我们一般把公钥告诉别人,让别人用我们的公钥去加密数据,然后不告诉别人我们的私钥,这样别人用我们的公钥加密的数据,只有我们自己能解密开,因为默认情况下,私钥只有我们自己知道;所以这个私钥一定要保护好,而且必须有密码器保护,这就是为什么我们在步骤四需要设置密码的原因了。
点击生成新密钥
8.在Subject主体标签,点击右下方OK,私钥和证书请求就都创建好了。
9.查看证书信息
10.查看私钥基本信息
11.选择Certificates 证书页签,点击新建证书,先不要点OK
切换到主体页签,这里和之前步骤一样,填写证书信息,创建私钥
切换到扩展页签注意,Type一定要选择为“Certificate Authority”,这样创建的此证书才能真正算是凭证管理中心的证书类型。同时,在这个页面也允许我们设置此证书的有效期限,默认情况下是以当前的时间为起点,在Time Range(时间范围)里面填上你希望的证书有效期限,默认单位为Year(年),你也可以根据你的需要设置成months(月),日(Days),在当前的例子中,我设置成10年。一定要点击后面的“Apply”*(应用)按钮,否则填入的数字不生效。
其他的标签页面配置保持不变,然后点击OK 按钮,自己的定义的凭证管理中心(Certificate Authority)就创建成功了。
12.点击“Certificate Signing Requests”标签页面中,选择你需要进行签名的证书请求
目前是未处理状态,这表示此证书还未被签名。选择需要签名的证书,并点击右键,在弹出的菜单中,选择“Sign”签发
13.把证书导出后,然后参考Google Chrome安装证书的方法,把证书安装到浏览器
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版本
解压到了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了!!
这里如果浏览器提示不安全,点继续即可