TLS #证书
概述
此文档记录了, 如何利用 windows 的 Linux 系统完成一个 TLS 证书的发布过程, 此方法可以用于制作自己的签名证书. 技术的详细介绍可
开始前的准备
- 启动 windows 的Linux 子系统
- 安装一个 Ubuntu
- 确保 Ubuntu 内可以运行 openssl, 无法运行的可以在网页上安装
生成 CA 根证书
执行第二步时会让你输入证书的信息, 可以根据自己的情况填写相应的信息. 其中的 Common Name很重要这个是你网站的域名. ``` Country Name (2 letter code) [AU]:CN State or Province Name (full name) [Some-State]:Yunnan Locality Name (eg, city) []:Kunming Organization Name (eg, company) [Internet Widgits Pty Ltd]:750 Organizational Unit Name (eg, section) []:1s Common Name (e.g. server FQDN or YOUR name) []:ais Email Address []:yss930819@163.comopenssl genrsa -out ca.key 2048openssl req -new -key ca.key -out ca.csropenssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
下面这两个数据留空即可 A challenge password []: An optional company name []:
<a name="xA3Rq"></a>## 生成 TLS 的证书```shellopenssl genrsa -out server.key 1024openssl req -new -key server.key -out server.csropenssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
执行第二步时请确保所有输入参数与 CA 证书一致.
执行第三步时会出现如下错误,
ca: ./demoCA/newcerts is not a directory./demoCA/newcerts: No such file or directory
请运行如下命令, 生成初始化的配置文件
mkdir -p ./demoCA/newcertstouch ./demoCA/index.txtecho "01" >> ./demoCA/serial
证书测试
server
server 使用 Golang 开发, 并基于goframe 框架 + gf-ex 进行编写,
- 源代码 ```go server := ystcp.InstanceTLS() server.Run()
for { yslog.Print(“等待数据!”) data := <-server.GetRecCh() yslog.Print(“已接收数据!”) server.GetSendCh() <- data }
- 启动采用默认配置- 127.0.0.1:8080- crt: ./server.crt- key: ./server.key<a name="ASdix"></a>### clientclient 采用 Python 进行开发```pythonimport socketimport sslimport timehostname = 'ais'context = ssl.create_default_context()with socket.create_connection((hostname, 8080)) as sock:with context.wrap_socket(sock, server_hostname=hostname) as ssock:while True:ssock.send(b"hello")print(ssock.recv())time.sleep(1)
注意事项
启动项目前自己将 ais 指向 127.0.0.1 的 IP.
同时将生成的 CA 证书安装到 Windows 系统内.
