openssl生成SSL证书的流程

本文详细介绍了SSL证书的工作原理及其在保障网站安全方面的作用,并深入解析了X509证书链的组成及生成过程,包括CA根证书与用户证书的创建步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socketlayer(SSL),SSL安全协议主要用来提供对用户和服务器的认证;对传送的数据进行加密和隐藏;确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准。由于SSL技术已建立到所有主要的浏览器和WEB服务器程序中,因此,仅需安装服务器证书就可以激活该功能了)。即通过它可以激活SSL协议,实现数据信息在客户端和服务器之间的加密传输,可以防止数据信息的泄露。保证了双方传递信息的安全性,而且用户可以通过服务器证书验证他所访问的网站是否是真实可靠。
    SSL网站不同于一般的Web站点,它使用的是“HTTPS”协议,而不是普通的“HTTP”协议。因此它的URL(统一资源定位器)格式为“https://www.baidu.com”。

什么是x509证书链

x509证书一般会用到三类文件,key,csr,crt。
Key是私用密钥,openssl格式,通常是rsa算法。
csr是证书请求文件,用于申请证书。在制作csr文件的时候,必须使用自己的私钥来签署申请,还可以设定一个密钥。
crt是CA认证后的证书文件(windows下面的csr,其实是crt),签署人用自己的key给你签署的凭证。

概念

    首先要有一个CA根证书,然后用CA根证书来签发用户证书。
    用户进行证书申请:一般先生成一个私钥,然后用私钥生成证书请求(证书请求里应含有公钥信息),再利用证书服务器的CA根证书来签发证书。
    特别说明:
(1)自签名证书(一般用于顶级证书、根证书): 证书的名称和认证机构的名称相同.
(2)根证书:根证书是CA认证中心给自己颁发的证书,是信任链的起始点。任何安装CA根证书的服务器都意味着对这个CA认证中心是信任的。
    数字证书则是由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机构的公章)后形成的一个数字文件。数字证书包含证书中所标识的实体的公钥(就是说你的证书里有你的公钥),由于证书将公钥与特定的个人匹配,并且该证书的真实性由颁发机构保证(就是说可以让大家相信你的证书是真的),因此,数字证书为如何找到用户的公钥并知道它是否有效这一问题提供了解决方案。

openssl中有如下后缀名的文件

.key格式:私有的密钥
.csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
.crt格式:证书文件,certificate的缩写
.crl格式:证书吊销列表,Certificate Revocation List的缩写
.pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式

CA根证书的生成步骤

生成CA私钥(.key)-->生成CA证书请求(.csr)-->自签名得到根证书(.crt)(CA给自已颁发的证书)。
[plain]  view plain  copy
  1. # Generate CA private key   
  2. openssl genrsa -out ca.key 2048   
  3. # Generate CSR   
  4. openssl req -new -key ca.key -out ca.csr  
  5. # Generate Self Signed certificate(CA 根证书)  
  6. openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt  
在实际的软件开发工作中,往往服务器就采用这种自签名的方式,因为毕竟找第三方签名机构是要给钱的,也是需要花时间的。

用户证书的生成步骤

生成私钥(.key)-->生成证书请求(.csr)-->用CA根证书签名得到证书(.crt)
服务器端用户证书:
[html]  view plain  copy
  1. # private key  
  2. $openssl genrsa -des3 -out server.key 1024   
  3. # generate csr  
  4. $openssl req -new -key server.key -out server.csr  
  5. # generate certificate  
  6. $openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key  
客户端用户证书:
[plain]  view plain  copy
  1. $openssl genrsa -des3 -out client.key 1024   
  2. $openssl req -new -key client.key -out client.csr  
  3. $openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key  
生成pem格式证书: 
有时需要用到pem格式的证书,可以用以下方式合并证书文件(crt)和私钥文件(key)来生成 

$cat client.crt client.key> client.pem 

$cat server.crt server.key > server.pem


结果:

服务端证书:ca.crt, server.key, server.crt, server.pem

客户端证书:ca.crt, client.key, client.crt, client.pem


注意:

在执行$openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key时可能会出错:

Using configuration from /usr/share/ssl/openssl.cfg I am unable to access the ./demoCA/newcerts directory ./demoCA/newcerts: No such file or directory 

解决方法:

1)mkdir -p ./demoCA/newcerts 
2)touch demoCA/index.txt 
3)touch demoCA/serial 
4)echo 01 > demoCA/serial

serial文件中写入01

并且第二行空一行


遇到的错误:

Sign the certificate? [y/n]:y

failed to update database

TXT_DB error number 2



产生的原因是:

This thing happens when certificates share common data. You cannot have two 
certificates that look otherwise the same.


解决办法: 

方法一:

 

修改demoCA下 index.txt.attr

 

  1. unique_subject = yes  

 改为

  1. unique_subject = no  

 方法二:

 

删除demoCA下的index.txt,并再touch下

  1. rm index.txt  
  2.   
  3. touch index.txt  

 方法三:

将 common name设置成不同的


我在遇到此类情况的时候采用的第二种方法;


ref:  blog.sina.com.cn/s/blog_6151984a0100f0q4.html





### 如何在 Windows 上使用 OpenSSL 生成 SSL 证书 #### 准备工作 为了能够在 Windows 系统上利用 OpenSSL 创建自签名的 SSL 证书,需先完成 OpenSSL 的安装以及环境设置。 确保已经从官方站点获取适合于 Windows 平台的 OpenSSL 版本并完成了软件包的部署过程[^1]。接着要调整系统的 Path 变量来包含 OpenSSL 执行文件所在的目录位置,比如 `C:\Program Files\OpenSSL-Win64\bin` 这样的路径,以便可以在命令提示符下直接调用 openssl 命令而无需指定全路径。 确认安装成功的方法是在命令行输入 `openssl version` 来查看当前使用的 OpenSSL 版本号信息[^4]。 #### 私钥创建 一旦准备工作就绪,则可以开始着手准备必要的密钥材料: ```bash openssl genrsa -out server.key 2048 ``` 上述指令会生成一个名为 "server.key" 的 RSA 类型私钥文件,其长度设定为 2048 bits,这一步骤对于后续构建公钥基础设施至关重要。 #### 请求证书签署 (CSR) 有了私钥之后,就可以继续制作证书签名请求(CSR),这是向认证机构提交以获得正式数字证书的过程的一部分。即使是要创建自签名证书也建议经历这个阶段因为这样有助于更好地理解整个流程。 ```bash openssl req -new -key server.key -out server.csr ``` 执行此操作时会被询问一系列有关组织和个人的信息项,这些字段并非强制性的可以根据实际情况决定是否提供具体值或是简单按 Enter 键跳过它们。 #### 自签名证书发放 最后一步就是实际发出该自签名证书了,这里指定了有效期为一年(-days 365), 输入之前产生的 CSR 文件作为源,并且再次引用同一份私钥来进行自我验证: ```bash openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt ``` 至此便得到了完整的服务器端 SSL 证书(server.crt)。 可以通过如下方式检验新生成证书内容: ```bash openssl x509 -in server.crt -text -noout ``` 这条命令将会显示关于所给定 .crt 文件内的全部细节描述[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值