我是靠谱客的博主 坚强砖头,最近开发中收集的这篇文章主要介绍亲测:windows使用OpenSSL生成证书(使用者备用名称(DNS)),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近一直在使用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
根据你的系统来选择不同的版本下载安装

3872133-afd5b9f87d4b23f6.png
image.png

点击运行文件后直接下一步就可以了,没有什么特殊设置。
(2)设置环境变量,例如工具安装在C:OpenSSL-Win64,则将C:OpenSSL-Win64bin;复制到Path中
3872133-38acd8c627b439bb.png
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)

3872133-6d24c9a28c50964d.png
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,证书里面才会多一个‘使用者备用名称’,如图:

3872133-8c9d5c0932afcfee.png
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

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


3872133-e61f8c84dce21add.png
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

最后

以上就是坚强砖头为你收集整理的亲测:windows使用OpenSSL生成证书(使用者备用名称(DNS))的全部内容,希望文章能够帮你解决亲测:windows使用OpenSSL生成证书(使用者备用名称(DNS))所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部