OpenSSL生成自签名证书

生成之前首先需要明白以下内容:

第三点的验证数字签名解释下:客户端将使用颁发机构的公钥解密得到的原始数据,再将原始数据通过哈希算法计算得到的哈希值(此处应该是使用CA证书提供的哈希算法)进行比对。如果两者一致,就表明数字签名有效且证书未被篡改;如果不一致,则数字签名无效或者证书已经被篡改。

自签名证书是指由用户自己生成和签名的证书,而不是由公认的证书颁发机构(如VeriSign或Let's

Encrypt)签名的证书。自签名证书是免费的,但通常不受浏览器和其他客户端的信任。
私有CA签发的证书和自签名证书区别

私有CA签发的证书:在这种情况下,用户不仅生成自己的证书,还创建了自己的CA,然后使用该CA签名其证书。这意味着用户有自己的证书颁发机构环境,可以用于签名多个证书。

自签名证书:在这种情况下,用户只是为自己创建和签名一个证书,而没有创建CA。这个证书是单独存在的,不依赖于任何CA机构。
key 私钥 = 明文--自己生成(genrsa )

csr 证书签名请求文件(包含了用于签发证书的公钥、用于辨识的名称信息) = 由私钥生成

crt 证书 = 公钥 +签名(自签名或者由CA签名)

证书:server.crt文件就是证书

签名:使用私钥key与公钥进行证书server.crt生成的过程称为签名
还有一种是https双向验证,即生成ca证书、使用CA分别签名生成服务端证书、客户端证书,服务端(nginx、apache)配置需要验证客户端证书

生成key 私钥sudo openssl genrsa -out server.key 1024

生成csr证书签名请求文件sudo openssl req -new -key server.key -out server.csr

新建个cert.ext扩展文件(不做此步会导致客户端安装证书之后一直提示NET::ERR_CERT_COMMON_NAME_INVALID-它的安全证书没有指定主题备用名称。不知道是否因为自签IP证书的原因,域名不知道是否可以,有知道的小伙伴可以评论下)

----更新:提示ERR的原因是生成证书的时候没有加上备用名称字段,目前的浏览器校验证书都需要这个备用名称(subjectAltName)扩展字段

如果多个域名,可以按照规律DNS.1/DNS.2/DNS.3/...来添加,同时还支持IP地址的形式,填入IP.1 = x.x.x.x就可以了。

powershell 复制代码
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName=@SubjectAlternativeName
 
[SubjectAlternativeName]
IP.1=192.168.50.xxx

生成证书(执行之后会提示让填信息,前面信息随便填,最后的common name最好是填IP/域名)sudo openssl x509 -req -days 3650 -extfile cert.ext -in /etc/pki/tls/private/server.csr -signkey /etc/pki/tls/private/server.key -out server.crt

这里举例使用私有ca签发:openssl x509 -req -sha256 -in server-csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server-crt

openssl x509: 表示要生成一个 X.509 格式的证书。

-req: 表示这是一个证书签名请求(CSR)。

-sha256: 表示使用 SHA-256 算法对 CSR 进行签名。

-in server-csr: 表示输入的证书签名请求文件是 server-csr。

-CA ca.crt: 用于指定用于签署证书请求的证书文件,即 CA 证书。这是必需的,因为它定义了签名证书的颁发者(CA),并提供了包含 CA 公钥的证书链(不知道是放了什么东西在crt里面,这里有点迷,有知道的小伙伴可以评论下)

-CAkey ca.key: 表示使用名为 ca.key 的 CA 密钥进行签名。

-CAcreateserial: 表示在生成证书时,由 CA 自动创建一个新的序列号。

-days 3650: 表示生成的证书有效期为 3650 天。

-out server-crt: 表示输出的证书文件名为 server-crt。

可以把 CA 的角色比喻为一个"权威",ca.crt 就像是守护者手中的一把"钥匙",用来验证其他人所持有的"证书"是否受到权威的认可。而

ca.key 则类似于权威的"印章",只有权威才有权力使用这个印章,用来对其他人的文件或请求进行签名,并赋予其权威的认可和信任。

上面就生成完不带CA的自签名证书了,我这边主要用于apache+svn的https配置,因此多做以下步骤

sudo vi /etc/httpd/conf.d/ssl.conf

sudo /etc/init.d/httpd restart

相关推荐
GGBondlctrl13 小时前
丹摩征文活动 |【网络原理】关于HTTP的进化之HTTPS的加密原理的那些事
网络·https·非对称加密·对称加密·中间人攻击
CDialog15 小时前
aws申请ssl证书的方法【该证书仅供aws】
服务器·网络协议·ssl
青龙老贼15 小时前
Nginx更换ssl证书不生效
服务器·nginx·ssl·ssl证书更换不生效
胖头鱼不吃鱼-1 天前
HTTP和HTTPS的区别
网络协议·http·https
B.-1 天前
在 Flutter 应用中调用后端接口的方法
android·flutter·http·ios·https
默闻革1 天前
Nginx报错unknown directive “ssl“
运维·nginx·ssl
小小工匠1 天前
Kafka - 启用安全通信和认证机制_SSL + SASL
安全·kafka·ssl·sasl
Ho_pe1 天前
ubuntu下openssl签名证书制作流程及验证demo
服务器·ubuntu·openssl
wdxylb2 天前
将C++搭建的简单HTTP服务器升级为 HTTPS 服务器
运维·服务器·https
Coding-Prince2 天前
cmake报错The link interface of target “gRPC::grpc“ contains: OpenSSL::SSL 解决
ssl·cmake