如何在Ubuntu 18.04中使用openssl生成自签名的SSL证书

时间:2020-07-27 12:59:05  来源:igfitidea点击:

在本教程中,我们将学习如何通过使用OpenSSL安装自签名的SSL证书来了解如何使用安全套接字层/传输层安全(SSL/TLS)配置Ubuntu Apache2 Web服务器。

我们开始通过启用mod_ssl软件包,然后我们使用openssl命令创建服务器证书并将证书应用于Apache虚拟主机。
在本教程结束时,我们将知道如何使用openssl命令生成自签名证书,并配置Apache Web服务器来应用证书。

请注意,HTTPS使用称为TLS的协议,该协议被取代SSL。
但是,讨论安全HTTP流量时仍然使用术语SSL,因此当我们说SSL时,实际上我们指的是TLS(传输层安全性)。

准备工作

预计已安装Apache Web服务器,它当前正在运行。
如果已尚未安装Apache,请按照以下链接中给出的说明进行安装:

如何在Ubuntu 18.04上安装Apache。

以下是在Ubuntu 18.04上为Apache/nginx Web服务器生成自签名证书的步骤:

  • 启用mod_ssl模块。
  • 使用openssl命令生成自签名证书。
  • 应用SSL证书。

要启用对HTTPS流量的支持,首先我们需要启用SSL模块:

sudo a2enmod ssl
sudo systemctl restart apache2

我们现在准备开始生成SSL/TLS证书。
以下是openssl命令,用于创建新的TLS证书和私钥:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.crt

系统将提示我们提供国家名称,州和组织名称等信息。
除共同名称外,所有这些问题都是可选的。
常见名称(CN)字段非常重要,应反映我们的域名。

如果要将此SSL证书应用于单个域名,例如www.example.com,那么常见名称应该是:

www.example.com

如果要生成对所有子域有效的通配符SSL证书,则使用星号(*)代替子域名:

*.example.com

应用SSL证书

既然我们已生成自签名证书,请在/etc/apache2 /站点可用目录中创建新的虚拟主机文件(例如example.com-ssl.conf),将其与以下配置匹配(将参数更改为根据要求):

<VirtualHost *:443>
    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www/example.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/example.com.crt
    SSLCertificateKeyFile /etc/ssl/private/example.com.key
</VirtualHost>

然后,启用HTTPS站点并重新启动Apache Web服务器:

sudo a2ensite example.com-ssl.conf
sudo systemctl reload apache2

自签名证书适用于测试和内部使用。
但如果我们打算在生产上使用SSL证书,建议安装由可信证书颁发机构提供的SSL证书。