OpenSSL生成自签名证书

生成之前首先需要明白以下内容:
在这里插入图片描述

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

假设Alice向Bob发送一份电子文档,并使用数字签名保护该文档的真实性和完整性。这是数字签名的生成和验证的具体流程:

数字签名的生成过程:

Alice使用哈希算法计算电子文档的哈希值。

Alice使用私钥对哈希值进行加密,生成数字签名。

Alice将数字签名和电子文档一起发送给Bob。

数字签名的验证过程:

Bob获取到数字签名、电子文档和颁发机构的公钥。

使用颁发机构的公钥对数字签名进行解密,得到签名的哈希值。

将电子文档通过相同的哈希算法进行计算,得到计算生成的哈希值。

比较解密得到的签名哈希值和计算生成的哈希值是否一致。

如果两者一致,表示数字签名有效且证书未被篡改。这意味着电子文档在传输过程中没有被修改,并且该数字签名确实是由颁发机构私钥对电子文档的哈希值进行签名得到的。

如果两者不一致,表示数字签名无效或者证书已被篡改。这可能是由于电子文档在传输过程中被篡改,或者数字签名不是由颁发机构私钥生成的。

通过数字签名,Bob可以确保收到的电子文档的真实性和完整性。即使文档在传输过程中被攻击者篡改,通过验证数字签名,Bob仍然可以检测到文档的篡改并拒绝接受。

自签名证书是指由用户自己生成和签名的证书,而不是由公认的证书颁发机构(如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 2048

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

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

----更新:提示ERR的原因是生成证书的时候没有加上备用名称字段,目前的浏览器校验证书都需要这个备用名称(subjectAltName)扩展字段
如果多个域名,可以按照规律DNS.1/DNS.2/DNS.3/…来添加,同时还支持IP地址的形式,填入IP.1 = x.x.x.x就可以了。

keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName=@SubjectAlternativeName
 
[SubjectAlternativeName]
IP.1=192.168.50.xxx

生成证书(执行之后会提示让填信息,前面信息随便填,最后的common name最好是填IP/域名)openssl x509 -req -days 3650 -extfile cert.ext -in server.csr -signkey 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
sudo svnadmin create /var/www/svn/

### 如何使用 OpenSSL 生成自签名证书 #### 准备工作 确保已安装并配置好 OpenSSL 工具。可以通过命令 `openssl version` 来验证是否成功安装。 #### 创建私钥文件 为了安全起见,先创建一个用于存储密钥的目录,并进入该目录: ```bash mkdir ~/ssl && cd ~/ssl ``` 接着可以利用下面这条指令来生成 RSA 私钥(默认长度为2048位),并将它保存到名为 `server-key.pem` 的文件里[^1]: ```bash openssl genrsa -des3 -out server-key.pem 2048 ``` 此过程会提示设置加密口令保护私钥的安全性;如果希望省去这一步,则可去掉 `-des3` 参数以不带密码的方式生成私钥。 #### 构建自签发 X.509 数字证书请求(CSR) 有了上述准备好的私钥之后,就可以着手构建 CSR 文件了。这里采用交互模式填写必要信息,最终产出的结果会被写入至 `server.csr` 中: ```bash openssl req -new -key server-key.pem -out server.csr ``` 在执行过程中需依次提供国家名、省份名称等细节资料给即将颁发出来的虚拟身份证明书所用。 #### 执行自签署操作得到公有证书 最后一步就是让刚才建立起来的那个实体自己给自己发放一张有效期一年的有效凭证——即所谓的“自签名证书”。具体做法如下所示: ```bash openssl x509 -req -days 365 -in server.csr -signkey server-key.pem -out server-cert.pem ``` 此时便完成了整个流程,在当前路径下应该能看到新产生的两个重要文档:一个是之前提到过的 `.csr` 请求表单副本;另一个则是至关重要的 `.pem` 结构化编码形式呈现出来的公开认证材料。 对于某些应用场景而言,可能还需要进一步转换成其他格式比如 PFX/PEM 等以便于部署应用环境之中[^2]。例如要将现有的 PEM 类型转存为 Windows 平台常用的 PKCS#12 归档包时可以用这样的语句实现: ```bash openssl pkcs12 -export -out server.pfx -inkey server-key.pem -in server-cert.pem ``` 以上便是完整的基于 OpenSSL 实现自定义 SSL/TLS 自签名证书制作全过程介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值