友情提示:自签名的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公钥和私钥

【实战总结】自签证书相关推荐

  1. 密码技术--证书及go语言生成自签证书

    证书类似身份证,里面记录了某人的姓名.年龄.地址等个人信息,还包括这个人的公钥(身份证号码),并由认证机构(类似派出所)进行数字签名后发放,只要我们看到该证书就可以知道认证机构认定了该公钥(身份证号码 ...

  2. https自签证书tls握手时错误或go系统错误处理

    https自签证书tls握手时报错:2021/11/03 09:22:53 http: TLS handshake error from ip:port: remote error: tls: unk ...

  3. centos7搭建DNS服务,CA字签证书

    1.描述TSL链路的通信图 第一阶段:client hello1:向服务端发送支持的协议版本,比如 tls1.22:客户端生成一个随机数,稍后用户生成"会话秘钥"3:发送支持的加密 ...

  4. freeswitch使用自签证书,配置WSS

    Freeswitch使用自签证书 1. 使用SSL-TOOLS生成自签证书 (1) 下载ssl.ca-0.1.tar.gz [root@localhost ~]# wget http://files. ...

  5. 【ssl认证、证书】SSL双向认证java实战、keytool创建证书

    文章目录 概述 keytool示例 参考 相关文章: //-----------Java SSL begin---------------------- [ssl认证.证书]SSL双向认证和SSL单向 ...

  6. 使用xca工具生成自签证书

    本文使用 xca 生成自签证书. 概述 之前使用 openssl 生成证书,在 golang 中测试,发现客户端连接失败,经查发现是Subject Alternative Name不支持导致的.因虚拟 ...

  7. 使用OpenSSL自签证书

    目录 文章目录 目录 一. 名词解释 1. CA机构 2. SSL 证书(SSL Certificates) 3. HTTPS(超文本传输安全协议) 4. 单向认证 5. 双向认证 二. 获取证书途径 ...

  8. Nginx 颁发自签证书

    不想看介绍直接跳到nginx颁发自签证书. 信息.摘要.数字签名.数字证书.对称加密.非对称加密到底是什么? 简述 我们都知道 HTTP 协议都是明文传输内容,为了保证数据传输的安全,HTTPS 协议 ...

  9. OpenSSL(加密方式,加密算法,自签证书)

    对称加密: symmetric cipher 算法: des des3 aes Blowfish TwofishRCG 对称加密是使用加密算法 和 口令进行加密的. # openssl enc -e ...

最新文章

  1. 进驻宝岛 不闪式3D热潮来临?
  2. 云计算开发技术,Python自动化运维开发实战三部分
  3. exadata磁盘组无法mount恢复---惜分飞
  4. 针对新手的Java EE7和Maven项目–第7部分
  5. mysql用户名锁定_MySQL用户锁定
  6. 数据库系统实训——实验八——数据库维护
  7. 深度学习《Life-Long Learning》
  8. atitit 每季度日程表 每季度流程 v3 qaf.docx Ver history V2 add diary cyar data 3 cate V3 fix detail 3cate ,
  9. 【封包技巧】利用wpe来(判断是否是某个特征码封包字节,然后进程修改)
  10. 词法分析器java语言_Java 实现词法分析器
  11. 矩孔菲涅尔衍射 matlab,圆孔矩孔的菲涅尔衍射模拟(matlab实现)-工程光学.docx
  12. 迅雷mac版精简教程
  13. 腾讯地图如何根据经纬度获取地址
  14. 初识html及工具的使用
  15. 什么品牌台灯最舒服?盘点2023最好的台灯品牌
  16. Python史上超级无敌复制文件工具
  17. mysql 获取数据库中最大的日期
  18. 立体栅格地图_制图技巧 | 如何利用ArcGIS让地图更有立体感
  19. 使用MPLAB X 对PIC单片机进行配置
  20. 《疯狂Java讲义》读书笔记2

热门文章

  1. hibernate问题易犯错误总结
  2. 关于指数函数与正弦函数的关系
  3. 百元左右平替苹果耳机有哪些?值得入手的蓝牙耳机推荐
  4. mysql数据库如何做缓存_MySql数据库缓存
  5. PDF转JPG图片使用ICEPDF,解决水印的问题
  6. Simple Math Problem
  7. 鸿蒙系统应用于哪款手机,魅族宣布接入鸿蒙系统 魅族鸿蒙系统手机是哪些?...
  8. 安装算量软件图纸比例操作
  9. over(Partition by...) 详细用法
  10. 可靠的手机问题修复工具分享 - 修复各种 Android 系统问题