OpenSSL使用示例创建自签名证书Linux
在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$▒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创建带有密码短语的自签名证书
在本节中,我将分享一些示例,这些示例将使用密码短语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:<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.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 = 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.crt
和server.key
转移到Apache服务器,然后在/etc/https/conf/httpd.conf
文件的虚拟主机中定义以下值。
SSLEngine On SSLCertificateFile /path/to/server.crt SSLCertificateKeyFile /path/to/server.key
接下来,重新启动httpd服务,现在我们可以通过HTTPS使用Apache。
但这被认为是不安全的,我们应该配置服务器客户端证书以使用SSL设置Apache以进行端到端加密。