如何在Ubuntu 18.04中使用openssl生成自签名的SSL证书
在本教程中,我们将学习如何通过使用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证书。