SSL-用OpenSSL命令行生成证书文件

本文详细介绍了如何使用OpenSSL生成服务器端和客户端的私钥、CSR文件,并自行创建CA进行证书签名的过程。从搭建环境到生成.pem文件,一步步指导读者完成整个流程。

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

SSL-用OpenSSL命令行生成证书文件---来自优快云,稍微增补了一下   软件准备: http://www.openssl.org/related/binaries.html  在这里可以下载到windows版本的,当前版本 v0.9.8g ­

­

   也许很多人和本人一样深有体会,使用OpenSSL库写一个加密通讯过程,代码很容易就写出来了,可是整个工作却花了了好几天。除将程序编译成功外(没有可以使用的证书文件,编译成功了,它并不能跑起来,并不表示它能正常使用,所以......),还需生成必要的证书和私钥文件使双方能够成功验证对方。 ­

找了n多的资料,很多是说的很模糊,看了n多的英文资料,还是没有办法(不知道是不是外国朋友都比较厉害,不用说明得太清?),无意间找到yawl (yawl@nsfocus.com)写的文章,难得的汉字(呵呵)。里面有生成证书部分,说到生成了 Certificate Signing Request (CSR)文件后,就有点不太清楚了。后面生成自签字证书在很多地方都可以找到的,签名这部分,yawl说mod_ssl有比较好的脚本,但是笔者一时找不到,就自己用openssl的ca命令来完成了,也不是很麻烦。 ­

­

说说本人的操作环境:无盘工作站(有权限问题使用起来不太方便),操作目录是openssl/bin(没办法改不了环境变量,如果你可以改的话,就不用在这个目录下工作了),为了方便本人把apps下的openssl.cnf也复制到了这个目录下来。文件名都是以本人使用的来说了: ­

­

1.首先要生成服务器端的私钥(key文件): ­

openssl genrsa -des3 -out server.key 1024 ­

运行时会提示输入密码,此密码用于加密key文件(参数des3便是指加密算法,当然也可以选用其他你认为安全的算法.),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果觉得不方便,也可以去除这个口令,但一定要采取其他的保护措施! ­

去除key文件口令的命令: ­

openssl rsa -in server.key -out server.key ­

­

2.openssl req -new -key server.key -out server.csr -config openssl.cnf ­

生成Certificate Signing Request(CSR),生成的csr文件交给CA签名后形成服务端自己的证书.屏幕上将有提示,依照其指示一步一步输入要求的个人信息即可. ­

­

3.对客户端也作同样的命令生成key及csr文件: ­

openssl genrsa -des3 -out client.key 1024 ­

openssl req -new -key client.key -out client.csr -config openssl.cnf ­

­

4.CSR文件必须有CA的签名才可形成证书.可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢. ­

    1)在bin目录下新建目录 demoCA、demoCA/certs、demoCA/certs  、 demoCA/newcerts ­

    2) 在demoCA建立一个空文件 index.txt ­

    3) 在demoCA建立一个文本文件 serial, 没有扩展名,内容是一个合法的16进制数字,例如 0000 ­

     4) openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf ­

5.用生成的CA的证书为刚才生成的server.csr,client.csr文件签名: ­

Openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf ­

Openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf ­

现在我们所需的全部文件便生成了. ­

另: ­

client使用的文件有:ca.crt,client.crt,client.key ­

server使用的文件有:ca.crt,server.crt,server.key ­

.crt文件和.key可以合到一个文件里面,本人把2个文件合成了一个.pem文件(直接拷贝过去就行了) (openssl新的版本已经放到demoCA/newcerts目录下了) ­

   星之魄发表于 2005年06月11日 17:52:00 ­

   ­

  原文 : http://blog.youkuaiyun.com/darkstar21cn/archive/2005/06/11/392492.aspx­

<think>我们正在模拟证书签发过程,使用OpenSSL命令行工具。证书签发通常涉及以下步骤: 1. 生成证书的私钥 2. 创建自签名的根证书(CA证书) 3. 生成服务器(或用户)证书的私钥 4. 创建服务器证书证书签名请求(CSR) 5. 使用根证书的私钥对服务器证书的CSR进行签名,生成服务器证书 下面我们逐步进行: ### 步骤1: 生成证书的私钥 使用以下命令生成一个RSA私钥(例如,2048位): ```bash openssl genrsa -out ca.key 2048 ``` ### 步骤2: 创建自签名的根证书 使用上一步生成的私钥创建自签名的根证书(CA证书)。在生成证书时,需要提供一些信息(如国家、组织等): ```bash openssl req -new -x509 -days 3650 -key ca.key -out ca.crt ``` 执行此命令后,会提示输入一些信息,这些信息将被嵌入到根证书中。 ### 步骤3: 生成服务器证书的私钥 同样,生成一个用于服务器证书的私钥: ```bash openssl genrsa -out server.key 2048 ``` ### 步骤4: 创建服务器证书证书签名请求(CSR) 使用服务器私钥生成证书签名请求(CSR): ```bash openssl req -new -key server.key -out server.csr ``` 同样,需要输入一些信息(注意:这些信息不必与根证书相同,但通常一些字段如国家、组织等需要符合一定的规则)。 ### 步骤5: 使用根证书签发服务器证书 使用根证书的私钥和根证书对服务器证书的CSR进行签名: ```bash openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt ``` 这里: - `-CA` 指定根证书 - `-CAkey` 指定根证书的私钥 - `-CAcreateserial` 选项会生成一个序列号文件(ca.srl),用于记录下一个可用的序列号 ### 验证证书 我们可以验证服务器证书是否由根证书签发: ```bash openssl verify -CAfile ca.crt server.crt ``` ### 示例 假设我们模拟一个简单的CA和服务器证书的签发过程,具体命令如下: 1. 生成CA私钥: ```bash openssl genrsa -out ca.key 2048 ``` 2. 生成自签名CA证书(有效期10年): ```bash openssl req -new -x509 -days 3650 -key ca.key -out ca.crt # 输入信息示例: # Country Name (2 letter code) []:CN # State or Province Name (full name) []:Beijing # Locality Name (eg, city) []:Beijing # Organization Name (eg, company) []:My CA # Organizational Unit Name (eg, section) []:Root CA # Common Name (eg, fully qualified host name) []:My CA # Email Address []:ca@example.com ``` 3. 生成服务器私钥: ```bash openssl genrsa -out server.key 2048 ``` 4. 生成服务器CSR: ```bash openssl req -new -key server.key -out server.csr # 输入信息示例(注意Common Name是服务器的域名,例如:www.example.com): # ... 其他信息可以不同,但Common Name要写服务器域名 ``` 5. 用CA证书签名服务器CSR: ```bash openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt ``` 6. 验证: ```bash openssl verify -CAfile ca.crt server.crt ``` 这样,我们就得到了: - `ca.key`: CA私钥 - `ca.crt`: CA证书(根证书- `server.key`: 服务器私钥 - `server.csr`: 服务器证书签名请求(可保留或删除) - `server.crt`: 服务器证书(由CA签发) ### 注意事项 - 在实际应用中,CA的私钥必须严格保护,因为泄露CA私钥意味着可以签发任意证书- 上述过程是简化版,实际中可能还会涉及扩展项(如主题备用名称SAN)等,可以通过配置文件添加。 ### 添加扩展项(可选) 如果需要为服务器证书添加扩展项(例如subjectAltName),可以创建一个配置文件(如`server.ext`): ``` authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = www.example.com DNS.2 = example.com ``` 然后在签名时使用该配置文件: ```bash openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -extfile server.ext ``` 这样生成的服务器证书就包含了SAN扩展。 §§相关问题§§ 1. 如何为OpenSSL生成证书添加主题备用名称(SAN)? 2. 如何使用OpenSSL创建中间CA并签发证书? 3. 如何将根证书安装到系统信任库中? 4. OpenSSL命令中,`-CAcreateserial`参数的作用是什么? 5. 如何查看证书的详细信息(如有效期、颁发者、主题等)?</think>### OpenSSL命令行模拟证书签发过程 OpenSSL命令行工具模拟证书签发过程主要包括以下步骤: #### 1. 生成证书(CA证书) ```bash # 生成CA私钥 openssl genrsa -out ca.key 2048 # 创建自签名根证书(有效期10年) openssl req -new -x509 -days 3650 -key ca.key -out ca.crt ``` 执行后会提示输入证书信息(国家/组织/通用名等),通用名建议使用`My Root CA`。 #### 2. 生成服务器证书请求(CSR) ```bash # 生成服务器私钥 openssl genrsa -out server.key 2048 # 创建证书签名请求(CSR) openssl req -new -key server.key -out server.csr ``` 在通用名(Common Name)处输入服务器域名(如`www.example.com`)。 #### 3. 签发服务器证书 ```bash # 使用CA证书签发服务器证书 openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt ``` 参数说明: - `-CAcreateserial`:生成唯一的序列号文件(`ca.srl`) - `-days 365`:证书有效期1年 - 输出`server.crt`为最终签发的证书 #### 4. 验证证书链 ```bash # 验证证书是否由CA签发 openssl verify -CAfile ca.crt server.crt # 查看证书详细信息 openssl x509 -in server.crt -text -noout ``` #### 完整流程示例 ```bash # 生成CA openssl genrsa -out ca.key 2048 openssl req -new -x509 -days 3650 -key ca.key -out ca.crt # 生成服务器证书 openssl genrsa -out server.key 2048 openssl req -new -key server.key -out server.csr openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt # 验证 openssl verify -CAfile ca.crt server.crt ``` #### 关键文件说明: | 文件 | 作用 | |------|------| | `ca.key` | CA私钥(需严格保密) | | `ca.crt` | 根证书(需分发给客户端) | | `server.key` | 服务器私钥 | | `server.csr` | 证书签名请求(可删除) | | `server.crt` | 最终服务器证书 | ### 常见问题解决 1. **证书验证失败**: ```bash # 添加CA信任链 cat ca.crt >> /etc/ssl/certs/ca-certificates.crt ``` 2. **缺少扩展属性**: 使用配置文件添加扩展(创建`ext.cnf`): ```ini [ req ] req_extensions = v3_req [ v3_req ] subjectAltName = @alt_names [ alt_names ] DNS.1 = www.example.com ``` 签发时添加:`-extfile ext.cnf -extensions v3_req` 3. **密钥格式转换**(如需要PKCS#12格式): ```bash openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt ``` > 注意:生产环境应使用更安全的椭圆曲线密钥(如`openssl ecparam -genkey -name prime256v1`),并设置合理的证书有效期[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值