在当今互联网时代,网站的安全性变得越来越重要,尤其是对于那些需要处理敏感信息的站点。启用HTTPS(Hypertext Transfer Protocol Secure)能够确保用户与网站之间的通信加密,从而防止数据被中途窃取或篡改。为了启用HTTPS,我们需要为网站生成SSL/TLS证书,本文将介绍如何在Ubuntu系统中使用OpenSSL生成证书并为网站启用HTTPS。通过这篇文章,你将能够了解从安装OpenSSL到配置Nginx或Apache Web服务器等详细步骤。
1. 安装OpenSSL
在开始之前,首先需要确保你已经在Ubuntu系统中安装了OpenSSL。OpenSSL是一个强大的工具,可以用于生成证书、管理密钥等操作。默认情况下,Ubuntu通常会安装OpenSSL,但如果没有安装,你可以通过以下命令来安装:
sudo apt update sudo apt install openssl
安装完成后,你可以使用以下命令来检查OpenSSL的版本,确认安装是否成功:
openssl version
如果安装成功,你将看到类似于"OpenSSL 1.1.1f 31 Mar 2020"的输出信息。
2. 生成自签名证书
对于开发环境或者测试站点,你可以生成一个自签名证书。这种证书不会受到浏览器信任,但它仍然能加密通信。在生产环境中,我们建议使用由受信任CA(证书颁发机构)签发的证书,但生成自签名证书是学习和测试HTTPS的好方法。
要生成自签名证书,你需要创建一个私钥文件和一个证书签名请求(CSR)。然后,你将使用私钥文件和CSR来生成证书。以下是生成自签名证书的步骤:
2.1 创建私钥文件
首先,创建一个私钥文件(例如:"server.key")。私钥是加密和解密操作的核心,因此必须妥善保管。
openssl genpkey -algorithm RSA -out server.key -aes256
这条命令会生成一个2048位的RSA私钥,并使用AES-256加密保护它。系统会要求你输入一个密码来保护私钥文件。你也可以选择不加密私钥,方法是去掉"-aes256"选项。
2.2 创建证书签名请求(CSR)
证书签名请求(CSR)是一个包含公钥和其他站点信息(如域名、公司名等)的文件,通常由CA用来生成有效证书。尽管我们这里使用的是自签名证书,但仍然需要生成一个CSR文件:
openssl req -new -key server.key -out server.csr
运行该命令时,系统会要求你输入一些信息,包括国家、地区、公司名、通用名称(即网站的域名)等。请确保填写的信息准确无误,尤其是“Common Name”字段,它应该与你网站的域名一致。
2.3 生成自签名证书
现在,使用CSR和私钥文件生成自签名证书。你可以指定证书的有效期(例如365天)。以下命令将生成一个名为"server.crt"的证书文件:
openssl x509 -req -in server.csr -signkey server.key -out server.crt -days 365
这样,你就完成了自签名证书的生成。证书的有效期为365天,到期后你需要重新生成证书。
3. 配置Nginx启用HTTPS
在Ubuntu系统上,Nginx是一个非常常用的Web服务器。下面,我们将介绍如何在Nginx上配置HTTPS,使用刚才生成的自签名证书。
3.1 安装Nginx
如果你还没有安装Nginx,可以通过以下命令进行安装:
sudo apt install nginx
安装完成后,你可以使用以下命令启动Nginx服务:
sudo systemctl start nginx
3.2 配置Nginx启用HTTPS
接下来,打开Nginx配置文件进行修改。Nginx的默认配置文件通常位于"/etc/nginx/sites-available/default"。使用文本编辑器(如"nano")打开该文件:
sudo nano /etc/nginx/sites-available/default
在配置文件中找到"server"块,修改或添加以下内容以启用HTTPS:
server { listen 80; server_name yourdomain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /path/to/server.crt; ssl_certificate_key /path/to/server.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384'; location / { root /var/www/html; index index.html index.htm; } }
在上面的配置中,"server_name"应替换为你自己的域名,"ssl_certificate"和"ssl_certificate_key"分别指向你之前生成的证书和私钥文件。
修改完成后,保存并退出编辑器。然后,通过以下命令检查Nginx配置文件的语法是否正确:
sudo nginx -t
如果配置正确,重新加载Nginx使更改生效:
sudo systemctl reload nginx
现在,Nginx已经启用了HTTPS,你可以通过访问"https://yourdomain.com"来验证是否成功。
4. 配置Apache启用HTTPS
如果你使用的是Apache Web服务器,配置HTTPS的步骤也非常类似。下面介绍如何在Apache中配置SSL/TLS证书。
4.1 安装Apache和SSL模块
首先,确保已经安装了Apache和SSL模块。在Ubuntu上,你可以通过以下命令安装:
sudo apt install apache2 sudo a2enmod ssl
安装完成后,重新启动Apache服务:
sudo systemctl restart apache2
4.2 配置Apache启用HTTPS
接下来,编辑Apache的配置文件,启用SSL:
sudo nano /etc/apache2/sites-available/default-ssl.conf
在配置文件中,修改以下部分以指向你生成的证书和私钥文件:
<VirtualHost _default_:443> ServerAdmin webmaster@localhost ServerName yourdomain.com DocumentRoot /var/www/html SSLEngine on SSLCertificateFile /path/to/server.crt SSLCertificateKeyFile /path/to/server.key <Directory /var/www/html> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>
完成后,保存文件并退出。然后,启用SSL站点并重新加载Apache配置:
sudo a2ensite default-ssl.conf sudo systemctl reload apache2
此时,Apache已经启用了HTTPS,你可以访问"https://yourdomain.com"进行测试。
5. 使用Let’s Encrypt获取免费的SSL证书
如果你需要为生产环境提供HTTPS,建议使用Let’s Encrypt,这是一个免费的证书颁发机构,提供由受信任CA签发的SSL/TLS证书。你可以通过Certbot工具轻松地为你的网站申请证书。安装Certbot后,只需运行以下命令:
sudo apt install certbot python3-certbot-nginx
然后,通过Certbot自动配置HTTPS:
sudo certbot --nginx
按照提示完成配置后,Certbot将自动为你的网站申请证书并配置Nginx。证书会在每90天更新一次,Certbot也会为你自动续期。