OpenSSL使用示例创建自签名证书Linux

时间:2020-01-09 10:38:43  来源:igfitidea点击:

在Linux中使用openssl创建自签名证书的步骤。

在Linux中创建自签名证书所需的步骤

生成自签名证书的步骤包括:

  • 生成私钥" server.key"

  • 创建证书签名请求(CSR)server.csr

  • 签署证书签名请求并生成自签名证书server.crt

安装openssl

在RHEL/CentOS 7/8上,我们可以分别使用yum/dnf,而在Ubuntu上,使用apt-get安装openssl rpm

说明:

在RHEL系统上,我们必须具有RHN的有效订阅,或者我们可以配置本地脱机存储库,通过该本地脱机存储库,yum软件包管理器可以安装提供的rpm及其依赖项。

[root@centos8-1 ~]# yum -y install openssl

创建加密的密码文件(可选)

  • 使用openssl自签名证书,可以生成带有或者不带有密码短语的私钥。

  • 如果在创建私钥时使用任何类型的加密,则每次尝试访问私钥时都必须提供密码。

  • 使用加密的密码文件,我们可以避免在创建自签名证书时输入密码。

我用我的秘密密码创建了一个纯文本文件mypass

[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$▒V΃cQVȥ▒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创建带有密码短语的自签名证书

在本节中,我将分享一些示例,这些示例将使用密码短语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)

提示:在此示例中,我将-passoutfile:<filename>一起使用,但是我们也可以使用pass:<passphrase>env:<variable>fd:<number>

如果不使用-passout选项,则openssl generate private key命令将在生成私钥之前提示输入密码。

创建证书签名请求(CSR)证书

接下来,使用openssl私钥(" server.key")创建证书签名请求(" server.csr")。

此命令将提示我们输入一系列内容(国家,州或者省等)。
确保"公用名"与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]:theitroad
Organizational Unit Name (eg, section) []:R&D
Common Name (eg, your name or your server's hostname) []:centos8-1
Email Address []:[email protected]
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 = theitroad
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.csr的私钥server.key来对证书进行签名并生成自签名证书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 = theitroad, OU = SDM, CN = centos8-1
Getting Private key

因此,我们的openssl generate ssl证书命令已成功执行,并且我们具有自签名证书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自签名证书的示例。
所有命令和步骤都将与上面用于生成自签名证书的步骤相同,唯一的区别是在中创建私钥时,我们将不使用任何加密方法。

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证书。
再次确保提供正确的"公用名"值,并且该值应与打算使用此证书的服务器详细信息的主机名/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]:theitroad
Organizational Unit Name (eg, section) []:R&D
Common Name (eg, your name or your server's hostname) []:centos8-1
Email Address []:[email protected]
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.keyserver-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 = theitroad, OU = R&D, CN = centos8-1, emailAddress = [email protected]
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

使用自签名证书设置Apache

创建自签名证书后,我们可以使用这些证书和密钥来使用SSL设置Apache(尽管浏览器会抱怨连接不安全)。

server.crtserver.key转移到Apache服务器,然后在/etc/https/conf/httpd.conf文件的虚拟主机中定义以下值。

SSLEngine On
SSLCertificateFile /path/to/server.crt
SSLCertificateKeyFile /path/to/server.key

接下来,重新启动httpd服务,现在我们可以通过HTTPS使用Apache。
但这被认为是不安全的,我们应该配置服务器客户端证书以使用SSL设置Apache以进行端到端加密。