请选择 进入手机版 | 继续访问电脑版

[LINUX] Linux下OpenSSL客户端中使用 req下令 来天生 证书的教程

[复制链接]
查看107 | 回复15 | 2021-9-5 00:09:20 | 显示全部楼层 |阅读模式

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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

avatar haiyuezhihun | 2021-9-12 07:39:45 | 显示全部楼层
论坛的人气不行了!
回复

使用道具 举报

avatar 零度2017 | 2021-9-18 08:34:09 | 显示全部楼层
admin楼主该去看心理医生了!
回复

使用道具 举报

avatar 123457227 | 2021-9-19 00:43:35 | 显示全部楼层
感谢admin楼主的推荐!
回复

使用道具 举报

avatar 白刃玄衣及 | 2021-9-19 07:20:33 | 显示全部楼层
禽兽不如应该不是说admin楼主的的吧?
回复

使用道具 举报

avatar 新北狂纱 | 2021-10-4 04:20:00 | 显示全部楼层
admin楼主好聪明啊!
回复

使用道具 举报

avatar 甜心猫舍 | 2021-10-13 20:24:21 | 显示全部楼层
admin楼主内心很强大!
回复

使用道具 举报

灌水不是我的目的!
回复

使用道具 举报

楼上的刚出院吧?
回复

使用道具 举报

admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的网站,他卖的服务器是永久的,我们的网站用 服务器都是在这家买的,你可以去试试。访问地址:http://fwq.mxswl.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则