使用OpenSSL自签证书
目录
文章目录
- 目录
- 一. 名词解释
- 1. CA机构
- 2. SSL 证书(SSL Certificates)
- 3. HTTPS(超文本传输安全协议)
- 4. 单向认证
- 5. 双向认证
- 二. 获取证书途径
- 三. 使用OpenSSL自签证书
- 前置准备
- 1. 生成CA证书
- 生成步骤
- 注意事项
- 2. 生成服务端证书
- 配置文件
- 生成步骤
- 注意事项
- 3. 生成客户端证书
- 生成步骤
- 四. 配置证书
- 单向认证
- 双向认证
- 五. 吊销列表
- 吊销步骤
- Nginx使用吊销列表
一. 名词解释
1. CA机构
电子商务认证中心、电子商务认证授权机构。是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
CA是负责签发证书、认证证书、管理已颁发证书的机关。
2. SSL 证书(SSL Certificates)
即安全套接层(SSL)数字证书,数字证书是一种用于电脑的身份识别机制。数字证书可以从身份认证机构获得。理论上任何人都可以给您发个数字证书。换个说法就是给您发数字证书的那个人或机构对您的公钥进行加签。一般国际可信的证书由CA机构制作颁发,据各种不同情况,可能是CA给用户颁发的,或者用户主动申请的。
3. HTTPS(超文本传输安全协议)
一种网络安全传输协议。在计算机网络上,HTTPS经由超文本传输协议进行通信,但利用SSL/TLS来对数据包进行加密。HTTPS开发的主要目的,是提供对网络服务器的身份认证,保护交换数据的隐私与完整性。
4. 单向认证
只需要验证SSL服务器身份,不需要验证SSL客户端身份。
5. 双向认证
要求服务器和客户端双方都有证书,客户端需要校验服务端,服务端也需要校验客户端。
二. 获取证书途径
- 向CA认证商购买
- 使用OpenSSL自签证书
三. 使用OpenSSL自签证书
前置准备
下载并安装OpenSSL,win端在此网站下载 http://slproweb.com/products/Win32OpenSSL.html
安装之后执行在命令行执行openssl version -a会输出相关信息
修改上一步执行命令后,OPENSSLDIR路径下的配置文件openssl.cnf
将CA_default下的dir的值改为.,其他不变
新建一个文件夹,之后都是基于该文件夹下进行操作
在文件夹内新建以下内容
certs // 文件夹,保存导出证书 config // 文件夹,保存配置文件 crl // 文件夹,保存吊销列表 csr // 文件夹,保存请求文件 newcerts // 文件夹,保存证书 private // 文件夹,保存密钥 crlnumber // 文本,下一个吊销列表序列号 index.txt // 文本,保存签证信息 serial // 文本,下一个证书序列号
给crlnumber、serial写入文本01
以下均是在win系统上执行,若要在Linux上执行,请将执行步骤里的反斜杠\替换成正斜杠/
1. 生成CA证书
既然要自签证书,因此需要自己承担CA这个角色,首先需要生成CA证书
生成步骤
生成CA密钥
openssl genrsa -out .\private\cakey.pem 4096
生成CA请求文件
openssl req -new -sha256 -out .\csr\cakey.csr -key .\private\cakey.pem
生成CA证书
openssl x509 -req -days 3650 -in .\csr\cakey.csr -signkey .\private\cakey.pem -out .\cacert.pem
导出安装用证书
openssl pkcs12 -export -inkey .\private\cakey.pem -in .\cacert.pem -out .\certs\ca.pfx
注意事项
执行第二步时,会要求填入相关信息,内如如下
Country Name (2 letter code) [AU]:CN // 国家 State or Province Name (full name) [Some-State]:GuangDong // 省份 Locality Name (eg, city) []:ShenZhen // 城市 Organization Name (eg, company) [Internet Widgits Pty Ltd]:YD-Cat // 机构 Organizational Unit Name (eg, section) []: // 单位,可选 Common Name (e.g. server FQDN or YOUR name) []:YD-Cat // 公用名,可选 Email Address []: // 可选Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: // 可选 An optional company name []: // 可选
第三步的 -days 3650 用来指定证书有效时间,若不指定则使用OpenSSL配置文件里的默认值
2. 生成服务端证书
生成步骤和CA证书类似,但需要添加一个配置文件
配置文件
在config文件夹下新建一个server.conf文件,内容如下
[ req ]
req_extensions = req_ext[ req_ext ]
subjectAltName = @alt_names[alt_names]
DNS.1 = test.com # 自行根据待配置证书的域名修改
DNS.2 = *.test.com # 自行根据待配置证书的域名修改,该项用来认证二级域名,若无需验证去掉即可
生成步骤
生成证书密钥
openssl genrsa -out .\private\serverkey.pem 2048
生成证书请求文件
openssl req -new -sha256 -out .\csr\serverkey.csr -key .\private\serverkey.pem
生成证书
openssl ca -in .\csr\serverkey.csr -out .\certs\server.crt -days 3650 -extensions req_ext -extfile .\config\server.conf
执行后输入两次 Y 并且回车即可
注意事项
执行第二步时,会要求填入相关信息,内容和CA证书一致
但此时若不修改OpenSSL配置文件,服务端证书部分字段要求和CA证书的对应字段一致,或者必填,否则无法签名
详情看配置文件openssl.cnf的[ policy_match ]项,根据需要修改对应的匹配规则即可
# 匹配规则 # match 完全一致 # optional 可选 # supplied 必填,可不一致 [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional
根据server.conf中的[alt_names]项的DNS.1 = test.com来匹配认证域名,若不匹配打开网之后会提示证书不安全
可使用 *.test.com 来通用匹配二级域名
3. 生成客户端证书
生成步骤和服务端类似,会多一个导出安装用证书的步骤
该步骤导出的文件用来在访问端电脑上安装
生成步骤
生成证书密钥
openssl genrsa -out .\private\clientkey.pem 2048
生成证书请求文件
openssl req -new -sha256 -out .\csr\client.csr -key .\private\clientkey.pem
生成证书
openssl ca -in .\csr\client.csr -out .\certs\client.crt -days 3650
执行后输入两次 Y 并且回车即可
导出安装用证书
openssl pkcs12 -export -inkey .\private\clientkey.pem -in .\certs\client.crt -out .\certs\client.pfx
四. 配置证书
以Nginx为例,在Nginx的配置文件做以下修改
单向认证
listen改为 443 ssl,server_name改为待配置证书的域名
注:server_name需和生成服务端证书的server.conf里的[alt_names]一致
新增以下配置
ssl_certificate D:\CA\certs\server.crt; # 服务端证书,即生成服务端证书第三步生成的文件
ssl_certificate_key D:\CA\private\serverkey.pem; # 服务端证书密钥,即生成服务端证书第一步生成的文件
在需要访问的电脑上安装certs文件夹下的CA证书,即生成CA证书的第四步生成的文件
ca.pfx
注意事项:
- 安装证书时选择安装位置,将证书安装在受信任的根证书颁发机构路径
- 若执行导出证书步骤时有填入密码,在安装证书时也要填写
- 重新加载Nginx配置文件
- 打开HTTPS网址,若一切正常,会正常登录,并在浏览器地址栏旁边会出现锁的图标
双向认证
- 在单向认证的基础上,Nginx新增以下配置
ssl_client_certificate D:\CA\cacert.pem; # CA证书,即生成CA证书第三步所生成的文件
ssl_verify_client on; # 开启客户端证书验证,即双向认证
在需要访问的电脑上安装certs文件夹下的客户端证书,即生成客户端证书的第四步生成的文件
client.pfx
注意事项:
- 安装时一直下一步即可
- 若最后打开网址无法选择证书,尝试像安装CA证书一样选择安装位置,安装到个人路径下
重新加载Nginx配置文件
打开HTTPS网址
- 若一切正常,会弹框提示选择证书
- 若有正常安装客户端证书,会有上一步所安装的客户端证书,以及相关信息
- 选择后可正常登陆,并在浏览器地址栏旁边会出现锁的图标
五. 吊销列表
目前吊销列表只适用于吊销客户端证书,并且已开启双向认证,将客户端证书吊销后即可无法登录
吊销步骤
获取证书编号
openssl x509 -in .\certs\证书名.crt -noout -serial
证书名改为生成客户端证书第三步生成的证书名
执行后,serial后为证书编号
吊销证书
openssl ca -revoke .\newcerts\证书编号.pem
将证书编号改为上一步所获取的证书编号
生成吊销列表文件,每一次吊销证书后都需要执行,否则无法更新其文件内容
openssl ca -gencrl -out .\crl\crl.pem
查看吊销列表,用来查看已吊销的证书,可不执行
openssl crl -in .\crl\crl.pem -noout -text
Nginx使用吊销列表
在双向认证的基础上,新增以下配置
ssl_crl D:\CA\crl\crl.pem; # 吊销列表文件
重新加载Nginx配置文件
打开HTTPS网址,之后和双向认证登陆一致,只是选择被吊销的证书后无法正常登陆
使用OpenSSL自签证书相关推荐
- Linux下OpenSSL自签ssl证书
翻遍多篇自签ssl证书资料总结的经验,不过还是推荐用阿里云免费的证书.因内网需要用到的证书,所以使用了自签ssl. 文章目录 介绍 生成证书 成为CA颁发机构 创建CA签名证书 nginx项目配置文件 ...
- 转 openssl 建立服务器证书
openssl 建立服务器证书 ## 1,建立目录和文件 set path=D:/openssl/bin D: cd D:/openssl/conf/ ren ope ...
- 密码技术--证书及go语言生成自签证书
证书类似身份证,里面记录了某人的姓名.年龄.地址等个人信息,还包括这个人的公钥(身份证号码),并由认证机构(类似派出所)进行数字签名后发放,只要我们看到该证书就可以知道认证机构认定了该公钥(身份证号码 ...
- 使用Openssl签发SSL证书
本文主要记述在Linux系统上使用Openssl创建SSL证书的流程,作为个人学习笔记.自签名证书分为自签名私有证书和自签名CA证书两种.自签名私有证书无法被吊销,自签名CA证书可以被吊销. 什么是o ...
- openssl私有CA证书签发与单双向认证
什么是CA? CA是数字认证中心的简称.指的是发放.管理.废除数字证书的机构. CA的作用: 检查证书持有者身份的合法性.签发证书(在证书上签字),以防证书被伪造或篡改,以及对证书和密钥进行管理. 建 ...
- centos7搭建DNS服务,CA字签证书
1.描述TSL链路的通信图 第一阶段:client hello1:向服务端发送支持的协议版本,比如 tls1.22:客户端生成一个随机数,稍后用户生成"会话秘钥"3:发送支持的加密 ...
- Apache OpenSSL生成CA证书使用
最近在学习SSL协议,这次是基于Apache服务器自带的openssl来实现的 TLS:传输层安全协议 SSL:安全套接字层 KEY:私钥 CSR:证书签名请求,即公钥,生成证书时需要将此提交给证书机 ...
- freeswitch使用自签证书,配置WSS
Freeswitch使用自签证书 1. 使用SSL-TOOLS生成自签证书 (1) 下载ssl.ca-0.1.tar.gz [root@localhost ~]# wget http://files. ...
- 使用xca工具生成自签证书
本文使用 xca 生成自签证书. 概述 之前使用 openssl 生成证书,在 golang 中测试,发现客户端连接失败,经查发现是Subject Alternative Name不支持导致的.因虚拟 ...
最新文章
- wxpython列表控件listctrl设置某行颜色_wxPython ListCtrl:写入彩色纹理
- Linux 网页挂马实验,网页挂马详细教程
- linux cd 命令案例,15个关于Linux的‘cd’命令的练习例子
- Python把列表中的数字尽量等分成n份
- iso启动盘替换文件注意修改md5sum.txt
- eclipse各个版本下载
- php 同步文件到服务器上,PHPstorm配置同步服务器文件
- Linux数据管理——文件锁定
- 对话框ModifyStyle(0, WS_MINIMIZEBOX)最小化按钮无效的解决方法
- 英语4级的分数如何计算机,英语四级分数怎么算
- 计算机连接公用网络受限,本地连接受限制不能上网的原因及解决方法
- 广度优先搜索(BFS)与深度优先搜索(DFS)的对比及优缺点
- PS调出怀旧雨中特写的非主流照片
- 弗洛伊德(floyd)算法核心代码
- 永远的友谊_友谊的传递属性-温馨介绍的重要性
- 软考是什么?怎么准备----软考相关资讯
- Linux简单入门命令
- XGBoost参数说明
- Aspose.Cells.dll的运用
- Hello Createjs