千家信息网

Linux下OpenSSL客户端中使用req命令来生成证书的操作方法

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家介绍Linux下OpenSSL客户端中使用req命令来生成证书的操作方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。openssl req 用于生成证书请求,以让
千家信息网最后更新 2026年11月03日Linux下OpenSSL客户端中使用req命令来生成证书的操作方法

这篇文章给大家介绍Linux下OpenSSL客户端中使用req命令来生成证书的操作方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

openssl req 用于生成证书请求,以让第三方权威机构CA来签发,生成我们需要的证书。req 命令也可以调用x509命令,以进行格式转换及显示证书文件中的text,modulus等信息。如果你还没有密钥对,req命令可以一统帮你生成密钥对和证书请求,也可以指定是否对私钥文件进行加密。

1、密钥、证书请求、证书概要说明

在证书申请签发过程中,客户端涉及到密钥、证书请求、证书这几个概念,初学者可能会搞不清楚三者的关系,网上有的根据后缀名来区分三者,更让人一头雾水。我们以申请证书的流程说明三者的关系。客户端(相对于CA)在申请证书的时候,大体上有三个步骤:

第一步:生成客户端的密钥,即客户端的公私钥对,且要保证私钥只有客户端自己拥有。
第二步:以客户端的密钥和客户端自身的信息(国家、机构、域名、邮箱等)为输入,生成证书请求文件。其中客户端的公钥和客户端信息是明文保存在证书请求文件中的,而客户端私钥的作用是对客户端公钥及客户端信息做签名,自身是不包含在证书请求中的。然后把证书请求文件发送给CA机构。
第三步:CA机构接收到客户端的证书请求文件后,首先校验其签名,然后审核客户端的信息,最后CA机构使用自己的私钥为证书请求文件签名,生成证书文件,下发给客户端。此证书就是客户端的身份证,来表明用户的身份。
至此客户端申请证书流程结束,其中涉及到证书签发机构CA,CA是被绝对信任的机构。如果把客户端证书比作用户身份证,那么CA就是颁发身份证的机构,我们以https为例说明证书的用处。

为了数据传输安全,越来越多的网站启用https。在https握手阶段,服务器首先把自己的证书发送给用户(浏览器),浏览器查看证书中的发证机构,然后在机器内置的证书中(在PC或者手机上,内置了世界上著名的CA机构的证书)查找对应CA证书,然后使用内置的证书公钥校验服务器的证书真伪。如果校验失败,浏览器会提示服务器证书有问题,询问用户是否继续。

例如12306网站,它使用的自签名的证书,所以浏览器会提示证书有问题,在12306的网站上有提示下载安装根证书,其用户就是把自己的根证书安装到用户机器的内置证书中,这样浏览器就不会报证书错误。但是注意,除非特别相信某个机构,否则不要在机器上随便导入证书,很危险。

2、req指令说明

上一节我们看到了申请证书流程,生成密钥对我们已经知道,那么如何生成证书请求呢,req指令就该上场了,我们可以查看req的man手册,如下:

openssl req [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-text] [-pubkey] [-noout] [-verify] [-modulus] [-new] [-rand file(s)] [-newkey rsa:bits][-newkey alg:file] [-nodes] [-key filename] [-keyform PEM|DER] [-keyout filename] [-keygen_engine id] [-[digest]] [-config filename] [-subj arg] [-multivalue-rdn] [-x509] [-days n] [-set_serial n][-asn1-kludge] [-no-asn1-kludge] [-newhdr] [-extensions section] [-reqexts section] [-utf8] [-nameopt] [-reqopt] [-subject] [-subj arg] [-batch] [-verbose] [-engine id]
发现其参数多而复杂,还有许多没有用到过的参数。但是在实际应用中我们使用到的参数很有限,我们根据req的基本功能来学习。

req的基本功能主要有两个:生成证书请求和生成自签名证书。其他还有一些校验、查看请求文件等功能,示例会简单说明下。参数说明如下

[new/x509]

当使用-new选取的时候,说明是要生成证书请求,当使用x509选项的时候,说明是要生成自签名证书。

[key/newkey/keyout]

key和newkey是互斥的,key是指定已有的密钥文件,而newkey是指在生成证书请求或者自签名证书的时候自动生成密钥,然后生成的密钥名称有keyout参数指定。

当指定newkey选项时,后面指定rsa:bits说明产生rsa密钥,位数由bits指定。指定dsa:file说明产生dsa密钥,file是指生成dsa密钥的参数文件(由dsaparam生成)

[in/out/inform/outform/keyform]

in选项指定证书请求文件,当查看证书请求内容或者生成自签名证书的时候使用

out选项指定证书请求或者自签名证书文件名,或者公钥文件名(当使用pubkey选项时用到),以及其他一些输出信息。

inform、outform、keyform分别指定了in、out、key选项指定的文件格式,默认是PEM格式。

[config]

参数文件,默认是/etc/ssl/openssl.cnf(ubuntu12.04),根据系统不同位置不同。该文件包含生成req时的参数,当在命令行没有指定时,则采用该文件中的默认值。

除上述主要参数外,还有许多其他的参数,不在一一叙述,有兴趣的读者可以查看req的man手册

3、req指令使用实例

(1)使用已有私钥生成证书请求

使用原有的RSA密钥生成证书请求文件,输入主体相关信息:

代码如下:


$ openssl req -new -key RSA.pem -passin pass:123456 -out client.pem


You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:AU
State or Province Name (full name) [Some-State]:BJ
Locality Name (eg, city) []:BJ
Organization Name (eg, company) [Internet Widgits Pty Ltd]:BJ
Organizational Unit Name (eg, section) []:BJ
Common Name (e.g. server FQDN or YOUR name) []:BJ
Email Address []:BJ
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:12345
An optional company name []:BJ
......
使用原有的RSA密钥生成证书请求文件,指定-batch选项,主体信息从配置文件读取:

代码如下:


$ openssl req -new -key RSA.pem -passin pass:123456 -out client.pem -batch


使用原有的RSA密钥生成证书请求文件,指定-batch选项,主体信息由命令行subj指定:

代码如下:


openssl req -new -key RSA.pem -passin pass:123456 -out client.pem -subj /C=AU/ST=Some-State/O=Internet


使用原有的RSA密钥生成证书请求文件,指定-batch选项,主体信息由命令行subj指定,且输出公钥:

代码如下:


$ openssl req -new -key RSA.pem -passin pass:123456 -out client.pem -subj /C=AU/ST=Some-State/O=Internet -pubkey


可以看到公钥和请求信息:

代码如下:


$ cat client.pem


-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAL6e+hk0TAsYlPk5XB1tLCtCO8wQ7JMM
YQ9SMy4Q1liPg4TdgSkdfbLB2UXmzzMCp+ZBDk9txwtewqv7PVcvY0MCAwEAAQ==
-----END PUBLIC KEY-----
-----BEGIN CERTIFICATE REQUEST-----
MIIBGDCBwwIBADA1MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTER
MA8GA1UECgwISW50ZXJuZXQwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAvp76GTRM
CxiU+TlcHW0sK0I7zBDskwxhD1IzLhDWWI+DhN2BKR19ssHZRebPMwKn5kEOT23H
C17Cq/s9Vy9jQwIDAQABoCkwJwYJKoZIhvcNAQkOMRowGDAJBgNVHRMEAjAAMAsG
A1UdDwQEAwIF4DANBgkqhkiG9w0BAQUFAANBAFBiB0fTUwTSoFeQdTWIr3KXzDHP
bgLy1/nlJ71dYLfGGrR61RKmrXgpf76akURtF+gEXwLMfPO6FQlaIOYEe/c=
-----END CERTIFICATE REQUEST-----


(2)自动生成密钥,生成证书请求文件

自动生成1024位RSA密钥,并生成证书请求文件:

代码如下:


$ openssl req -new -newkey rsa:1024 -out client.pem -keyout RSA.pem -batch


Generating a 1024 bit RSA private key
.......................................++++++
...............................++++++
writing new private key to 'RSA.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
......
自动生成1024位RSA密钥,并生成证书请求文件,指定-nodes文件,密钥文件不加密:

代码如下:


$ openssl req -new -newkey rsa:1024 -out client.pem -keyout RSA.pem -batch -nodes


Generating a 1024 bit RSA private key
..++++++
.........................++++++
writing new private key to 'RSA.pem'
......
自动生成1024位DSA密钥参数:

代码如下:


$ openssl dsaparam -out DSA.param 1024


Generating DSA parameters, 1024 bit long prime
This could take some time
...+.+..+.+++++++++++++++++++++++++++++++++++++++++++++++++++*
................+...........+......+.+.............+.+.....+.+++++++++++++++++++++++++++++++++++++++++++++++++++*
自动生成1024位DSA密钥,并生成证书请求文件,指定-nodes文件,密钥文件不加密:

代码如下:


$ openssl req -new -newkey dsa:DSA.param -out client.pem -keyout DSA.pem -batch -nodes


Generating a 1024 bit DSA private key
writing new private key to 'DSA.pem'
......


(3)生成自签名证书

生成自签名证书,与req参数一样,只需要把req修改为x509即可:

代码如下:


$ openssl req -x509 -newkey rsa:1024 -out client.cer -keyout RSA.pem -batch -nodes


Generating a 1024 bit RSA private key
.........++++++
..++++++
writing new private key to 'RSA.pem'
......
查看证书文件:

代码如下:


$ openssl x509 -in client.cer -noout -text


Certificate:
Data:
Version: 3 (0x2)
.....
Signature Algorithm: sha1WithRSAEncryption
5b:d7:f5:fd:18:3a:a9:22:2a:d9:f1:fc:00:3a:cf:23:ff:d1:
82:e5:2d:3f:7e:97:a8:38:32:e6:88:7a:ce:9f:31:cc:ea:60:
06:d1:96:bb:c8:42:ec:ef:26:73:4e:3b:2d:fa:0f:16:c2:25:
30:1b:a5:ca:35:bd:9b:dd:4b:41:d4:8b:95:3a:d4:7c:aa:8d:
0d:2d:e7:f3:95:33:d2:4a:5a:7f:a2:5d:cc:48:60:9f:ca:2d:
77:d9:ed:e9:09:f3:a1:18:96:1d:91:c6:1c:2b:7a:c1:d6:5d:
81:87:25:0d:32:6a:55:d2:89:95:c5:32:44:cc:9d:e7:68:6f:
d8:80


(4)查看证书请求内容

生成证书请求:

代码如下:


$ openssl req -new -newkey rsa:1024 -out client.req -keyout RSA.pem -batch -nodes


Generating a 1024 bit RSA private key
...............................................................++++++
......................++++++
writing new private key to 'RSA.pem'
......
查看证书请求内容,subject指定输出主体:

代码如下:


$ openssl req -in client.req -noout -text -subject


Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (1024 bit)
Modulus:
...
Exponent: 65537 (0x10001)
Attributes:
Requested Extensions:
X509v3 Basic Constraints:
CA:FALSE
X509v3 Key Usage:
Digital Signature, Non Repudiation, Key Encipherment
Signature Algorithm: sha1WithRSAEncryption
...
subject=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd

(5)校验证书请求文件

指定verify指令,校验证书请求文件,其操作时提取请求文件中的公钥来验证签名信息:

代码如下:


$ openssl req -verify -in client.req -noout


verify OK


4、生成证书步骤小结

Step 1. Create key (password protected)

代码如下:


openssl genrsa -out prvtkey.pem 1024/2038 (with out password protected)

代码如下:


openssl genrsa -des3 -out prvtkey.pem 1024/2048 (password protected)


这个命令会生成一个1024/2048位的密钥。
Step 2. Create certification request

代码如下:


openssl req -new -key prvtkey.pem -out cert.csr
openssl req -new -nodes -key prvtkey.pem -out cert.csr


这个命令将会生成一个证书请求,当然,用到了前面生成的密钥prvtkey.pem文件
这里将生成一个新的文件cert.csr,即一个证书请求文件,你可以拿着这个文件去数字证书颁发机构(即CA)申请一个数字证书。CA会给你一个新的文件cacert.pem,那才是你的数字证书。
Step 3: Send certificate request to Certification Authority (CA)
如果是自己做测试,那么证书的申请机构和颁发机构都是自己。就可以用下面这个命令来生成证书:

代码如下:


openssl req -new -x509 -key prvtkey.pem -out cacert.pem -days 1095


这个命令将用上面生成的密钥privkey.pem生成一个数字证书cacert.pem

关于Linux下OpenSSL客户端中使用req命令来生成证书的操作方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

证书 生成 文件 密钥 客户 代码 机构 客户端 命令 信息 参数 公钥 端的 用户 自动生成 主体 内容 时候 浏览器 浏览 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州为想互联网科技有限公司 蓝思科技飞鸽互联网 国智互联网科技 互联网金融科技平台 青岛中康互联网医疗科技有限公司 互联网科技中介 团飞科技与伯堂互联网服务平台 贵州叶脉互联网科技有限公司所属行业 玉溪互联网科技怎么选 辽宁互联网新科技 恒生互联网科技业指数调整周期 宇信科技在杭州互联网排第几 下一代互联网重大应用科技园 广州燕处互联网科技有限公司 国产互联网科技公司 容联科技互联网电商 兰石爱特工业互联网科技分公司 悟空问答互联网科技 上海互联网科技园景观 利用互联网等科技手段 远信互联网科技 狮子座互联网科技有限公司 互联网教育科技公司vipkid 以后互联网后是啥科技 茂名市互联网科技产业园 山东星卡互联网科技有限公司官网 中国新注册互联网科技 保山互联网科技靠谱吗 银川新华互联网科技学校原画 互联网科技大会大佬
0