TLS #证书

概述

此文档记录了, 如何利用 windows 的 Linux 系统完成一个 TLS 证书的发布过程, 此方法可以用于制作自己的签名证书. 技术的详细介绍可

参考链接: https://zhuanlan.zhihu.com/p/423506052

开始前的准备

  1. 启动 windows 的Linux 子系统
  2. 安装一个 Ubuntu
  3. 确保 Ubuntu 内可以运行 openssl, 无法运行的可以在网页上安装

    生成 CA 根证书

    1. openssl genrsa -out ca.key 2048
    2. openssl req -new -key ca.key -out ca.csr
    3. openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
    执行第二步时会让你输入证书的信息, 可以根据自己的情况填写相应的信息. 其中的 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.com

下面这两个数据留空即可 A challenge password []: An optional company name []:

  1. <a name="xA3Rq"></a>
  2. ## 生成 TLS 的证书
  3. ```shell
  4. openssl genrsa -out server.key 1024
  5. openssl req -new -key server.key -out server.csr
  6. openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key

执行第二步时请确保所有输入参数与 CA 证书一致.
执行第三步时会出现如下错误,

  1. ca: ./demoCA/newcerts is not a directory
  2. ./demoCA/newcerts: No such file or directory

请运行如下命令, 生成初始化的配置文件

  1. mkdir -p ./demoCA/newcerts
  2. touch ./demoCA/index.txt
  3. echo "01" >> ./demoCA/serial

之后出现的输入提示都使用 y 即可
image.png

证书测试

server

server 使用 Golang 开发, 并基于goframe 框架 + gf-ex 进行编写,

  • 源代码 ```go server := ystcp.InstanceTLS() server.Run()

for { yslog.Print(“等待数据!”) data := <-server.GetRecCh() yslog.Print(“已接收数据!”) server.GetSendCh() <- data }

  1. - 启动采用默认配置
  2. - 127.0.0.1:8080
  3. - crt: ./server.crt
  4. - key: ./server.key
  5. <a name="ASdix"></a>
  6. ### client
  7. client 采用 Python 进行开发
  8. ```python
  9. import socket
  10. import ssl
  11. import time
  12. hostname = 'ais'
  13. context = ssl.create_default_context()
  14. with socket.create_connection((hostname, 8080)) as sock:
  15. with context.wrap_socket(sock, server_hostname=hostname) as ssock:
  16. while True:
  17. ssock.send(b"hello")
  18. print(ssock.recv())
  19. time.sleep(1)

注意事项

启动项目前自己将 ais 指向 127.0.0.1 的 IP.
同时将生成的 CA 证书安装到 Windows 系统内.