【实战总结】自签证书
友情提示:自签名的SSL证书存在安全隐患,在生产环境上需要购买和使用经权威机构认证和颁发的证书
一、理论基础
前提:安装了OpenSSL
先推荐一篇https的文章可帮助了解CA证书的用途,比较长但很值得专心读完:https://blog.csdn.net/weixin_41385912/article/details/110605359
概念
CA:认证机构。有自己的证书,可以拿自己的证书给别人签名然后收钱,互联网中最顶级就叫根证书。在这里我们会虚拟出一个CA机构,然后用他来给自己的证书认证签名。
(网站)证书 :发送给客户端的证书,其中大部分是公钥。是一个包含自己网站的公钥、认证、签名等信息的文件。
(网站)私钥 :服务器留存的解密私钥(server)
注意区分 CA机构的证书(可以拿来给其他网站证书签名)和 自己网站的证书(不可以),不一样
基本流程
1、搞一个虚拟的CA机构,生成一个证书
2、生成自己的密钥,然后填写证书认证申请,拿给上面的CA机构去签名,于是就得到了(自建CA机构认证的)签名证书
3、使用:在Server中配置
声明开启HTTPS (SSL认证)
声明侦听443端口(并确保已在防火墙上打开443端口)
复制已签名的SSL证书和私钥到指定位置,并设置正确的文件权限
配置已签名的SSL证书(.crt)的位置
配置已签名的SSL证书私钥(.key)的位置
配置将HTTP请求都重定向到HTTPS
4、在浏览器中访问
在浏览器中打开https://来访问。
在Firefox浏览器中可以添加Security Exception来忽略HTTPS错误警告。
Chrome浏览器可以尝试通过导入CA证书的方式来忽略HTTPS错误警告。
二、实战部分
第4步 提供了脚本附件
1、根据实际的机器ip,在extCfg_client.ext 和extCfg_server.ext中修改配置,其中下面的配置可以根据需要任意增加多个,这样生成的证书就会对多个IP地址有效。
IP.1 = 17.1.1.17
DNS.1 = local.domain
2、把extCfg_client.ext 、extCfg_server.ext、createCrt.sh放在同一个目录下,执行createCrt.sh脚本就可以生成证书。
3、 证书格式转换(拿到的证书文件后,可以根据实际需要做一下PKCS#8编码 格式转换)
我们知道pkcs8是私钥的语法标准。看到支付宝的文档上有个注意事项:java用户需要将私钥转换成pkcs8格式,而对于.net和php则不需要。在php5.5.29测试,确实对于php私钥转不转pkcs8都可以加解密。
在用java作为服务器端语言,对信息进行RSA签名的时候,私钥要求是PKCS8格式的。可以通过以下命令对原始key进行格式转换:
.key结尾的client.key、server.key文件类似下面这样转换一下就得到新的new_client.key文件
openssl pkcs8 -in client.key -topk8 -nocrypt -out new_client.key
4、附件
extCfg_client.ext
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName=@SubjectAlternativeName[ SubjectAlternativeName ]
IP.1 = 17.1.1.181
DNS.1 = client.local.domain.181
IP.2 = 17.1.1.182
DNS.2 = client.local.domain.182
extCfg_server.ext
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName=@SubjectAlternativeName[ SubjectAlternativeName ]
IP.1 = 17.1.1.171
DNS.1 = server.local.domain.171
IP.2 = 17.1.1.172
DNS.2 = server.local.domain.172
createCrt.sh
#!/bin/bash#第一部分:虚构一个CA认证机构出来# 生成CA认证机构的证书密钥key,需要设置密码4位以上
openssl genrsa -passout pass:1111 -des3 -out ca.key 4096
# 用私钥ca.key生成CA认证机构的证书ca.crt
# 其实就是相当于用私钥生成公钥,再把公钥包装成证书,这个证书ca.crt有的又称为"根证书",因为可以用来认证其他证书
openssl req -passin pass:1111 -new -x509 -days 365 -key ca.key -out ca.crt -subj "/CN=testCA.com"#第二部分:生成网站的证书(server),用上面那个虚构出来的CA机构来认证# 生成自己网站的密钥server.key,需要设置密码4位以上
openssl genrsa -passout pass:4444 -des3 -out server.key 4096
# 生成自己网站证书的请求文件,如果找外面的CA机构认证,也是发个请求文件给他们
# 这个私钥就包含在请求文件中了,认证机构要用它来生成网站的公钥,然后包装成一个证书
openssl req -passin pass:4444 -new -key server.key -out server.csr -subj "/CN=server.local.domain"
# 使用虚拟的CA认证机构的证书ca.crt,来对自己网站的证书请求文件server.csr进行处理,生成签名后的证书server.crt,注意设置序列号和有效期(一般都设1年)
openssl x509 -req -passin pass:1111 -days 365 -in server.csr -extfile extCfg_server.ext -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
#(拓展内容,不需要的话可以注释掉)去除私钥中的密码 注意:-in输入的是有密码的私钥server.key,-out输出的是没有密码的私钥server.key
openssl rsa -passin pass:4444 -in server.key -out server.key
#证书格式转换,合成 pkcs#8 证书(含私钥)
openssl pkcs8 -topk8 -nocrypt -in server.key -out server.pem #第三部:生成访问用户(client)的证书,用上面那个虚构出来的CA机构来认证openssl genrsa -passout pass:5555 -des3 -out client.key 4096
openssl req -passin pass:5555 -new -key client.key -out client.csr -subj "/CN=client.local.domain"
openssl x509 -passin pass:1111 -req -days 365 -in client.csr -extfile extCfg_client.ext -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt
openssl rsa -passin pass:5555 -in client.key -out client.key
openssl pkcs8 -topk8 -nocrypt -in client.key -out client.pem
常用后缀名
.crt .cer 证书(Certificate) 由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息
.key 密钥/私钥(Private Key) 服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密
.csr 证书认证签名请求(Certificate signing request) 证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名
*.pem base64编码文本储存格式,可以单独放证书或密钥,也可以同时放两个;base64编码就是两条-------之间的那些莫名其妙的字符;
PEM的明显好处是可以安全地粘贴到电子邮件的正文中,因为它具有定位线并且是7位纯净的。不要太注意文件扩展名;
该名称来自“ 隐私增强邮件(PEM)”,这是一种用于保护电子邮件的失败方法,但是其使用的容器格式仍然存在,并且是x509 ASN.1密钥的base64转换。
*.der 证书的二进制储存格式(不常用)
参数说明
# genrsa 生成RSA私钥
# rsa RSA数据管理
# -passin 输入这个加密密钥文件的解密密钥(如果在生成这个密钥文件的时候,选择了加密算法了的话)
# -passout 如果希望输出的密钥文件继续使用加密算法的话则指定密码# -des3 des3算法
# -out server.key 生成的私钥文件名
# 2048 私钥长度# req 生成证书签名请求
# -req 表明输入文件是一个"请求签发证书文件(CSR)",等待进行签发
# -new 新生成
# -key 私钥文件
# -out 生成的CSR文件
# -subj 生成CSR证书的参数 set or modify request subject
# -days 证书有效期
# -nocrypt#在密码学中,X.509是一个标准,规范了公开秘钥认证、证书吊销列表、授权凭证、凭证路径验证算法等。
# x509 输出一个X509格式的证书
# -x509 加上-x509 表示直接输出证书# subjectAltName,主体别名扩展项。为证书提供了形式更加灵活的命名方式,理论上可以包含IP地址、URL、email、DNS域名、RID(已注册对象标识)及IP地址等信息作为主体别名。
subj参数说明如下:
字段 字段含义 示例
/C= Country 国家 CN
/ST= State or Province 省 Guangdong
/L= Location or City 城市 Guangzhou
/O= Organization 组织或企业 xdevops
/OU= Organization Unit 部门 xdevops
/CN= Common Name 域名或IP gitlab.xdevops.cn
参考文档(以下文档值得结合本文一起阅读,理解会更透彻)
https://blog.csdn.net/nklinsirui/article/details/89432430
https://www.jianshu.com/p/0e9ee7ed6c1d
https://blog.csdn.net/scuyxi/article/details/54884976
https://blog.csdn.net/gengxiaoming7/article/details/78505107
https://blog.csdn.net/cangzihu/article/details/53488995
https://blog.csdn.net/Crystal360/article/details/79291393
https://blog.csdn.net/wzfgd/article/details/109805158
https://qastack.cn/server/9708/what-is-a-pem-file-and-how-does-it-differ-from-other-openssl-generated-key-file使用OpenSSL工具制作X.509证书的方法及其注意事项总结
如何使用OpenSSL生成RSA公钥和私钥
【实战总结】自签证书相关推荐
- 密码技术--证书及go语言生成自签证书
证书类似身份证,里面记录了某人的姓名.年龄.地址等个人信息,还包括这个人的公钥(身份证号码),并由认证机构(类似派出所)进行数字签名后发放,只要我们看到该证书就可以知道认证机构认定了该公钥(身份证号码 ...
- https自签证书tls握手时错误或go系统错误处理
https自签证书tls握手时报错:2021/11/03 09:22:53 http: TLS handshake error from ip:port: remote error: tls: unk ...
- centos7搭建DNS服务,CA字签证书
1.描述TSL链路的通信图 第一阶段:client hello1:向服务端发送支持的协议版本,比如 tls1.22:客户端生成一个随机数,稍后用户生成"会话秘钥"3:发送支持的加密 ...
- freeswitch使用自签证书,配置WSS
Freeswitch使用自签证书 1. 使用SSL-TOOLS生成自签证书 (1) 下载ssl.ca-0.1.tar.gz [root@localhost ~]# wget http://files. ...
- 【ssl认证、证书】SSL双向认证java实战、keytool创建证书
文章目录 概述 keytool示例 参考 相关文章: //-----------Java SSL begin---------------------- [ssl认证.证书]SSL双向认证和SSL单向 ...
- 使用xca工具生成自签证书
本文使用 xca 生成自签证书. 概述 之前使用 openssl 生成证书,在 golang 中测试,发现客户端连接失败,经查发现是Subject Alternative Name不支持导致的.因虚拟 ...
- 使用OpenSSL自签证书
目录 文章目录 目录 一. 名词解释 1. CA机构 2. SSL 证书(SSL Certificates) 3. HTTPS(超文本传输安全协议) 4. 单向认证 5. 双向认证 二. 获取证书途径 ...
- Nginx 颁发自签证书
不想看介绍直接跳到nginx颁发自签证书. 信息.摘要.数字签名.数字证书.对称加密.非对称加密到底是什么? 简述 我们都知道 HTTP 协议都是明文传输内容,为了保证数据传输的安全,HTTPS 协议 ...
- OpenSSL(加密方式,加密算法,自签证书)
对称加密: symmetric cipher 算法: des des3 aes Blowfish TwofishRCG 对称加密是使用加密算法 和 口令进行加密的. # openssl enc -e ...
最新文章
- 进驻宝岛 不闪式3D热潮来临?
- 云计算开发技术,Python自动化运维开发实战三部分
- exadata磁盘组无法mount恢复---惜分飞
- 针对新手的Java EE7和Maven项目–第7部分
- mysql用户名锁定_MySQL用户锁定
- 数据库系统实训——实验八——数据库维护
- 深度学习《Life-Long Learning》
- atitit 每季度日程表 每季度流程 v3 qaf.docx Ver history V2 add diary cyar data 3 cate V3 fix detail 3cate ,
- 【封包技巧】利用wpe来(判断是否是某个特征码封包字节,然后进程修改)
- 词法分析器java语言_Java 实现词法分析器
- 矩孔菲涅尔衍射 matlab,圆孔矩孔的菲涅尔衍射模拟(matlab实现)-工程光学.docx
- 迅雷mac版精简教程
- 腾讯地图如何根据经纬度获取地址
- 初识html及工具的使用
- 什么品牌台灯最舒服?盘点2023最好的台灯品牌
- Python史上超级无敌复制文件工具
- mysql 获取数据库中最大的日期
- 立体栅格地图_制图技巧 | 如何利用ArcGIS让地图更有立体感
- 使用MPLAB X 对PIC单片机进行配置
- 《疯狂Java讲义》读书笔记2
热门文章
- hibernate问题易犯错误总结
- 关于指数函数与正弦函数的关系
- 百元左右平替苹果耳机有哪些?值得入手的蓝牙耳机推荐
- mysql数据库如何做缓存_MySql数据库缓存
- PDF转JPG图片使用ICEPDF,解决水印的问题
- Simple Math Problem
- 鸿蒙系统应用于哪款手机,魅族宣布接入鸿蒙系统 魅族鸿蒙系统手机是哪些?...
- 安装算量软件图纸比例操作
- over(Partition by...) 详细用法
- 可靠的手机问题修复工具分享 - 修复各种 Android 系统问题