文档中心
Apache鏈嶅姟鍣ㄥ垱寤篐TTPS璇佷功鍏ㄦ敾鐣ユ墜鎶婃墜鏁欎綘瀹炵幇缃戠珯鍔犲瘑
时间 : 2025-09-27 15:41:27浏览量 : 2
为什么你的网站需要HTTPS?

想象一下,你在咖啡馆用公共WiFi登录银行账户,如果没有HTTPS保护,你的账号密码就像写在明信片上邮寄一样危险。HTTPS通过SSL/TLS证书为数据传输加密,就像给你的网站装上了防窃听的保险箱。
Google从2025年起就将HTTPS作为搜索排名因素,Chrome浏览器还会给非HTTPS网站打上"不安全"的红色警告。根据统计,超过90%的网页加载已使用HTTPS——如果你的网站还在用HTTP,简直就是在互联网上"裸奔"!
准备工作:搭建环境
在开始前,你需要:
1. 一台运行Apache的服务器(Ubuntu/CentOS都适用)
2. root或sudo权限
3. 域名已经解析到服务器IP
以Ubuntu为例,先确保Apache已安装:
```bash
sudo apt update
sudo apt install apache2
```
检查Apache是否运行:
systemctl status apache2
看到绿色的"active (running)"就说明准备就绪了。
三种主流证书获取方式详解
方法一:OpenSSL自签名证书(适合测试环境)
自签名证书就像自己手写的身份证,虽然浏览器会提示不安全警告(就像保安怀疑你伪造证件),但内部测试完全够用。
生成私钥和证书:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/apache-selfsigned.key \
-out /etc/ssl/certs/apache-selfsigned.crt
系统会交互式询问信息:
- Country Name (2 letter code): CN
- State or Province Name: Beijing
- Locality Name: Beijing
- Organization Name: Your Company
- Common Name: 输入你的域名(如test.com)
方法二:Let's Encrypt免费证书(生产环境首选)
Let's Encrypt是公益组织提供的免费证书,相当于互联网的"公共身份证颁发机构"。通过Certbot工具可以自动续期:
安装Certbot:
sudo apt install certbot python3-certbot-apache
获取证书(替换yourdomain.com):
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com
Certbot会自动完成验证(验证你确实控制该域名)、生成证书并配置Apache。整个过程不到1分钟!
方法三:商业CA付费证书(企业级需求)
像DigiCert、GeoTrust这些商业CA颁发的证书,就像是公安局签发的正式身份证。购买后通常会收到.zip文件包含:
- domain.crt (证书文件)
- ca-bundle.crt (中间证书)
- private.key (私钥)
上传到服务器指定位置即可。
Apache配置实战演示
无论哪种方式获得的证书,最终都需要在Apache中配置。打开SSL配置文件:
sudo nano /etc/apache2/sites-available/default-ssl.conf
关键配置项示例:
```apacheconf
ServerName yourdomain.com
SSLEngine on
自签名证书路径示例
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
Let's Encrypt路径示例
SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem
DocumentRoot /var/www/html
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
启用SSL模块和站点配置:
sudo a2enmod ssl
sudo a2ensite default-ssl.conf
systemctl restart apache2
HTTPS安全加固技巧
1. 强制跳转HTTPS
在80端口的VirtualHost中添加:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
2. 启用HSTS
在SSL配置中添加:
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
这告诉浏览器:"以后只许用HTTPS访问我!"
3. 选择更安全的加密套件
修改/etc/apache2/mods-available/ssl.conf:
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
常见问题排错指南
问题1:浏览器提示"不安全连接"
? 检查原因:自签名证书需要手动信任;Let's Encrypt可能域名验证失败
? 解决方案:`sudo certbot certificates`查看状态;`journalctl -xe`查日志
问题2:ERR_SSL_VERSION_OR_CIPHER_MISMATCH
? 通常是加密套件不兼容
? 解决方案:更新上述SSLCipherSuite配置后重启Apache
问题3:混合内容警告
? HTTPS页面加载了HTTP资源(如图片、JS)
? 解决方案:将资源链接改为//开头或https://绝对路径
HTTPS性能优化建议
1. 开启OCSP Stapling
减少浏览器验证证书时的延迟:
```apacheconf
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
2. 会话恢复优化
减少TLS握手开销:
SSLSessionCache shmcb:/tmp/ssl_scache(512000)
SSLSessionCacheTimeout 300
3. HTTP/2加持
大幅提升多资源加载速度:
```bash
sudo a2enmod http2
然后在SSL VirtualHost添加`Protocols h2 http/1.1`
自动化维护方案
对于Let's Encrypt的90天有效期,设置自动续期:
1. 测试续期命令是否正常工作:
sudo certbot renew --dry-run
2. 添加cron任务每月自动续期:
echo "0 */12 * * * root test -x /usr/bin/certbot && perl -e 'sleep int(rand(3600))' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null
对于商业证书到期提醒:
echo | openssl s_client -connect yourdomain.com:443 | openssl x509 -noout –dates
可将此命令加入监控系统。
HTTPS的未来趋势
随着TLS 1.3成为新标准(相比1.2提速明显),以及像HPKP被淘汰、CAA记录普及等变化。建议关注:
? QUIC协议带来的HTTP/3革命性变化
? ECC椭圆曲线算法逐步替代RSA密钥
? ACME v2协议支持通配符证书
记住一句安全格言:"不是所有HTTPS都一样安全",正确的配置比单纯启用更重要。现在就去检查你的Apache SSL配置吧!
TAG:apache创建https证书,apache 证书,apache2安装ssl证书,apache搭建http服务器,搭建apache,apache搭建https