美文网首页我爱编程
亲测:windows使用OpenSSL生成证书(使用者备用名称(

亲测:windows使用OpenSSL生成证书(使用者备用名称(

作者: 尤樊容 | 来源:发表于2018-08-01 13:26 被阅读4次

最近一直在使用OpenSSL生成证书,供tornado使用,tornado本身是支持使用SSL证书的,所有现在只需生成正确的证书就可以正常使用了,经过自己的一番倒腾,走了很多弯路,终于是可以使用了,所以将步骤记录下来,以便于自己查看,要是能对大家有帮助那就更好啦!(以下步骤亲测有效,遇到的坑也会在下文提到,望高手指教!)

1、安装OpenSSL

本来准备直接放一个链接在这的,但是感觉不是特别的准确,所以借鉴这个在写详细一些。
(1)OpenSSL下载( [https://www.openssl.org/source/(https://www.openssl.org/source/))没有提供windows版本的安装包,可以选择其他开源平台提供的工具。例如 http://slproweb.com/products/Win32OpenSSL.html
根据你的系统来选择不同的版本下载安装

image.png
点击运行文件后直接下一步就可以了,没有什么特殊设置。
(2)设置环境变量,例如工具安装在C:\OpenSSL-Win64,则将C:\OpenSSL-Win64\bin;复制到Path中
image.png
这个路径需要写自己的安装路径呀,exe在bin文件中,所以记得加上bin
部分借鉴:https://blog.csdn.net/kitok/article/details/72957185
2、生成证书

在bin(bin文件在安装目录里面)文件中打开cmd,依次输入以下命令:

注意:这里有一个大坑,我也是爬了好久的,所以先跟大家说明一下,再详细说命令。

由于Chrome 58 及以上版本只会使用 subjectAlternativeName 扩展程序(而不是 commonName)来匹配域名和网站证书。如果直接按照下面的步骤生成的ssl证书是不能直接在谷歌正常使用的,会说证书无效,并报错:NET::ERR_CERT_COMMON_NAME_INVALID 。
以下是谷歌对这个错误的说明(https://support.google.com/chrome/a/answer/7391219?hl=zh-Hans

image.png
所以需要先解决这个问题,以下为解决步骤:
主要修改在openssl.cnf(该文件在bin文件中)
确保req下存在以下2行(默认第一行是有的,第2行被注释了)

[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req

确保req_distinguished_name下没有 0.xxx 的标签,有的话把0.xxx的0. 去掉

[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = CN
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = ShangHai
localityName = Locality Name (eg, city)
localityName_default = ShangHai
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = Domain Control Validated
commonName = Internet Widgits Ltd
commonName_max = 64

新增最后一行内容 subjectAltName = @alt_names(前2行默认存在)

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

新增 alt_names,注意括号前后的空格,DNS.x 的数量可以自己加

[ alt_names ]
DNS.1 = abc.example.com
DNS.2 = dfe.example.org
DNS.3 = ex.abcexpale.net
DNS.4 = localhost

以上是为了添加‘使用者备用名称(DNS)’,在下面的命令中会用到v3_req 也就是这几个DNS,证书里面才会多一个‘使用者备用名称’,如图:
image.png
借鉴:http://blog.51cto.com/colinzhouyj/1566438
客户端
  • 生成私钥(key文件):
openssl genrsa -out client.key 2048
  • 生成csr文件
openssl req -new -key client.key -out client.csr -config openssl.cnf

这里需要填写一些基本信息:


image.png
服务器端
  • 生成私钥(key文件):
openssl genrsa -out server.key 2048
  • 生成csr文件
openssl req -new -key server.key -out server.csr -config openssl.cnf

这里的Common Name 写主要域名就好了(注意:这个域名也要在openssl.cnf的DNS.x里)

CSR文件必须有CA的签名才可形成证书.可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢.

1、在bin目录下新建目录 demoCA、demoCA/certs、demoCA/certs、demoCA/newcerts
2、在demoCA建立一个空文件 index.txt
3、在demoCA建立一个文本文件 serial, 没有扩展名,内容是一个合法的16进制数字,例如 0000
4、生成ca.key并自签署

openssl req -new -x509 -days 3650 -keyout ca.key -out ca.crt -config openssl.cnf
用生成的CA的证书为刚才生成的server.csr,client.csr文件签名:
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -extensions v3_req -config openssl.cnf

openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -extensions v3_req -config openssl.cnf

到这里证书就生成好了,下一步就是在tornado中使用了,详情请看下一节python tornado使用OpenSSL生成的证书
资料:
http://www.yeolar.com/note/2015/04/30/tornado-ssl-https/
http://blog.51cto.com/colinzhouyj/1566438

相关文章

网友评论

  • 114dec714859:刚才全部弄完了,可以用curl -k 得到hello world ,可是网页上打不开 这怎么办呢
    尤樊容:@泽_c891 yy737064439
    114dec714859:@youfrweb 不知道呀,,大佬 方便加个微信吗,这个其实不怎么用
    尤樊容:curl -k 这个都可以了,网页怎么会打不开呢?
  • 114dec714859:前面的问题都弄好了,,就是最后一条命令报错呀。。,这是什么
    failed to update database
    TXT_DB error number 2
    尤樊容:这个错我没见过呢
  • 114dec714859:我还是每台懂 common Name 的域名 应该填哪个,,我自己之前买了个域名,我直接写那个域名就可以吗?这个域名填上去 的作用是什么呢
    尤樊容:@泽_c891 嗯嗯,是的
    114dec714859:@youfrweb 你意思是在填 commoon 信息的时候 也可以直接填写localhost?
    尤樊容:我当时是使用localhost测试的,你可以尝试写上自己的域名试试,记得添加在openssl.cnf的DNS.x里。填上这个域名是在最后访问的时候输出结果,你可以看看下一篇使用的最后访问ur。l
  • 114dec714859:楼主,这个方法在ubuntu 或者centos可以用吗
    尤樊容:这个我没尝试过呀,所以不清楚

本文标题:亲测:windows使用OpenSSL生成证书(使用者备用名称(

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