在本文中,我将与openssl分享在Linux中创建自签名证书的步骤。
在Linux中创建自签名证书所需的步骤
生成自签名证书的步骤包括:
- 生成私钥
server.key
- 创建证书签名请求(CSR)
server.csr
- 签署证书签名请求并生成自签名证书
server.crt
安装openssl
在RHEL / CentOS 7/8上,您可以分别使用yum / dnf,而在Ubuntu上,则可以apt-get用于安装openssl rpm
[root @ centos8-1〜]#yum -y install openssl
创建加密的密码文件(可选)
- 使用openssl自签名证书,可以生成带有或不带有
passphrase
的private key
。 - 如果在创建私钥时使用任何类型的加密,则每次尝试访问私钥时都必须提供密码。
- 使用加密的密码文件
passphrase
,我们可以避免在创建自签名证书时输入密码。
我已经在mypass
文件中存储了密码secret
。
[root @ centos8-1〜]#echo secret > mypass
使用openssl enc
我将加密mypass
文件并创建一个加密文件mypass.enc
[root@centos8-1 ~]# openssl enc -aes256 -pbkdf2 -salt -in mypass -out mypass.enc
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
加密文件的内容现在不可读。我们将此加密文件共享给任何用户以生成ssl证书。
[root@centos8-1 ~]# cat mypass.enc
Salted__▒▒Y$▒VcQVȥ▒2ĺ)▒MS▒
如果要解密加密的密码文件,可以使用以下命令:
[root@centos8-1 ~]# openssl enc -aes256 -pbkdf2 -salt -d -in mypass.enc
enter aes-256-cbc decryption password:
secret
我将创建一个新目录来存储我的证书
[root@centos8-1 certs]# mkdir /root/certs
[root@centos8-1 certs]# cd /root/certs
我也将加密的密码文件复制到/root/certs
[root@centos8-1 certs]# ls -l
total 8
-rw-r--r-- 1 root root 32 Apr 9 13:31 mypass.enc
OpenSSL创建带有passphrase的自签名证书
在本节中,我将分享一些示例,这些示例将使用密码来openssl创建自签名证书,但是我们将使用加密的文件mypass.enc
来创建私钥和其他证书文件。
生成私钥
我们需要生成私钥,该私钥将在后续步骤中用于创建证书签名请求(CSR)
在此示例中,我们将创建具有3DES加密的私钥。
您还可以选择其他任何输入方式。
[root@centos8-1 certs]# openssl genrsa -des3 -passout file:mypass.enc -out server.key 4096
Generating RSA private key, 4096 bit long modulus (2 primes)
................................................++++
..++++
e is 65537 (0x010001)
提示:在这个例子中用-passout file
:,也可以使用pass:<passphrase>
,env:<variable>
,fd:<number>
。如果不使用该-passout
选项,则openssl generate private key命令将在生成私钥之前提示输入密码。
创建证书签名请求(CSR)证书
接下来使用openssl私钥server.key
创建一个server.csr
证书请求。
这个命令将提示输入一系列内容(国家,州或省等)。确保“ Common Name ”与Linux服务器的注册完全合格域名(如果没有IP地址,则匹配您的IP地址)相匹配。或者,您也可以创建SAN认证,该认证将允许您在单个证书中提供多个备用名称。
[root@centos8-1 certs]# openssl req -new -key server.key -out server.csr -passin file:mypass.enc
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) [XX]:IN
State or Province Name (full name) []:KARNATAKA
Locality Name (eg, city) [Default City]:BENGALURU
Organization Name (eg, company) [Default Company Ltd]:GoLinuxCloud
Organizational Unit Name (eg, section) []:R&D
Common Name (eg, your name or your server's hostname) []:centos8-1
Email Address []:admin@golinuxcloud.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
(可选)要自动执行此步骤来创建CSR(server.csr·),我们可以使用
openssl.cnf`或创建一个带有所需输入的配置文件,如下所示:
[root@centos8-1 certs]# cat self_signed_certificate.cnf
[req]
distinguished_name = req_distinguished_name
prompt = no
[req_distinguished_name]
C = IN
ST = Karnataka
L = Banaglore
O = GoLinuxCloud
OU = SDM
CN = centos8-1
现在使用此配置文件创建CSR (如果已经创建了server.csr
,则可以忽略此设置):
[root@centos8-1 certs]# openssl req -new -key server.key -out server.csr -passin file:mypass.enc -config self_signed_certificate.cnf
在这里,我们-config
用来从self_signed_certificate.cnf
文件中获取输入。但是,请确保根据服务器主机名更改CN值。
使用openssl x509创建自签名证书
- openssl x509命令是一个多用途证书实用程序。
- 它可用于显示证书信息,将证书转换为各种形式,签署证书请求(例如“迷你CA”)或编辑证书信任设置
- 创建自签名证书的最后一步是对证书签名请求进行签名。
- 在此示例中,openssl证书将持续365天。
- 我们将使用私钥
server.key
和server.csr
对证书进行签名并生成自签名证书server.crt
[root@centos8-1 certs]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt -passin file:mypass.enc
Signature ok
subject=C = IN, ST = Karnataka, L = Banaglore, O = GoLinuxCloud, OU = SDM, CN = centos8-1
Getting Private key
因此,openssl已成功创建了自签名证书 server.crt
。
OpenSSL验证证书内容
在本文中,我们创建了以下证书
- server.key⇒私钥
- server.csr⇒证书签名请求
- server.crt⇒自签名证书
可以使用openssl查看自签名证书和其他文件的内容:
# openssl rsa -noout -text -in server.key
# openssl req -noout -text -in server.csr
# openssl x509 -noout -text -in server.crt
Openssl自签名证书,无密码
在本节中,我将分享创建无密码的openssl自签名证书的示例。
所有命令和步骤都将与上面用于生成自签名证书的步骤相同,唯一的区别是在步骤1中创建私钥时,我们将不使用任何加密方法。
OpenSSL生成私钥
本章节将以openssl genrsa
为示例,我们将不使用任何加密:
[root@centos8-1 certs]# openssl genrsa -out server-noenc.key 4096 -nodes
Generating RSA private key, 4096 bit long modulus (2 primes)
................................................................++++
...................................................................................................++++
e is 65537 (0x010001)
openssl生成私钥在没有提示任何口令的情况下被执行。现在,由于我们使用`-nodes·了不带密码短语的私钥,因此将使用该密钥创建我们的CSR并签署证书,其余的openssl命令将不会提示您输入任何密码短语。
创建证书签名请求(CSR)证书
接下来,我们将使用我们的私钥创建CSR证书。再次确保提供正确的“Common Name”值,并且该值应与打算使用此证书的服务器详细信息的主机名/ FQDN相匹配。
[root@centos8-1 certs]# openssl req -new -key server-noenc.key -out server-noenc.csr
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) [XX]:IN
State or Province Name (full name) []:KARNATAKA
Locality Name (eg, city) [Default City]:BENGALURU
Organization Name (eg, company) [Default Company Ltd]:GoLinuxCloud
Organizational Unit Name (eg, section) []:R&D
Common Name (eg, your name or your server's hostname) []:centos8-1
Email Address []:admin@golinuxcloud.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
要再次自动执行此步骤,可以创建我们在此步骤中创建的配置文件…。
使用openssl x509创建自签名证书
现在,在最后一步中使用openssl x509,我们将使用server-noenc.key
和创建并签署我们的证书server-noenc.csr
[root@centos8-1 certs]# openssl x509 -req -days 365 -in server-noenc.csr -signkey server-noenc.key -out server-noenc.crt
Signature ok
subject=C = IN, ST = KARNATAKA, L = BENGALURU, O = GoLinuxCloud, OU = R&D, CN = centos8-1, emailAddress = admin@golinuxcloud.com
Getting Private key
OpenSSL验证证书内容
在本章节中,我们创建了以下证书
- server-noenc.key⇒私钥
- server-noenc.csr⇒证书签名请求
- server-noenc.crt⇒自签名证书
可以使用openssl查看自签名证书和其他文件的内容:
#openssl rsa -noout -text -in server-noenc.key
#openssl req -noout -text -in server-noenc.csr
#openssl x509 -noout -text -in server-noenc.crt