部署SSL证书需要完成步骤较多,如生成私钥和证书签名,获取证书及在Web服务器上配置SSL,下面是Apache Web服务器上部署SSL证书的流程。
先生成私钥:
openssl genrsa -out your_domain.key 2048
以上命令可以生成2048位私钥,存于your_domain.key中。
生成CSR:
openssl req -new -key your_domain.key -out your_domain.csr
按照提示填写信息,信息是用于生成CSR。
获取SSL证书可以选择从CA购买,提供CSR给CA然后等待审核,完成后就可以获取到证书。也可以直接从IDC服务商那购买SSL证书。证书类型多种,需要根据实际需求选择合适类型。
Apache中配置SSL需要先创建SSL虚拟主机配置,如/etc/apache2/sites-available/your_domain_ssl.conf:
sudo nano /etc/apache2/sites-available/your_domain_ssl.conf
添加内容(根据实际情况定):
<VirtualHost *:443>
ServerAdmin admin@example.com
ServerName your_domain.com
ServerAlias www.your_domain.com
DocumentRoot /var/www/your_domain
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/your_domain.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/your_domain.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/your_domain.com/chain.pem
</VirtualHost>
将SSLCertificateFile、SSLCertificateKeyFile和SSLCertificateChainFile指向你的证书文件。
启用新配置:
sudo a2ensite your_domain_ssl.conf
重启Apache服务:
sudo systemctl restart apache2
SSL证书配置是否正确测试/是否生效,可以用SSL在线工具如SSL Server Test等。
确保SSL证书部署网站有域名控制器,SSL证书办法机构会进行验证。确保证书和私钥安全,保证SSL证书在有效期内。生产环境中确保使用2048位甚至更高位数的密钥长度生成密钥。
如果是在Nginx上配置SSL,创建一个新的配置文件或编辑现有的配置文件,例如/etc/nginx/sites-available/your_domain_ssl.conf:
sudo nano /etc/nginx/sites-available/your_domain_ssl.conf
添加:
server {
listen 443 ssl;
server_name your_domain.com www.your_domain.com;
ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # disable SSLv3
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
# HSTS (ngx_http_headers_module is required) (63072000 seconds = 7280 hours = 300 days)
add_header Strict-Transport-Security "max-age=63072000" always;
# Add header to use HTTPS
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
# SSL Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
root /var/www/your_domain;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
server_name your_domain.com www.your_domain.com;
return 301 https://$server_name$request_uri;
}
将ssl_certificate和ssl_certificate_key指向你的证书文件。创建符号链接:
sudo ln -s /etc/nginx/sites-available/your_domain_ssl.conf /etc/nginx/sites-enabled/
测试Nginx:
sudo nginx -t
重启Nginx:
sudo systemctl restart nginx
验证SSL部署同上。