首先要获取SSL证书(包括私钥和证书文件,可能还有链证书),根据使用的Web服务器(Apache/Nginx)配置SSL证书,配置HTTP到HTTPS的重定向,PHP代码中处理HTTPS的相关检查,最后验证验证SSL配置是否正确,所以在PHP应用中配置SSL证书实际上是通过配置Web服务器(如Apache或Nginx)来实现的,只因SSL/TLS加密是在服务器层面处理的。下面是配置详细的步骤:
1. 获取SSL证书
购买证书:从可信的证书颁发机构(CA)如DigiCert、Comodo购买,或使用免费的Let's Encrypt证书。
自签名证书(仅测试用):
bash
复制
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt
2. 配置Web服务器
Apache 配置
(1). 启用SSL模块:
bash
复制
sudo a2enmod ssl
(2). 编辑虚拟主机文件(如/etc/apache2/sites-available/default-ssl.conf):
apache
复制
<VirtualHost *:443>
ServerName yourdomain.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /path/to/your_domain.crt
SSLCertificateKeyFile /path/to/your_private.key
SSLCertificateChainFile /path/to/chain.crt # 可选(如CA提供的中间证书)
其他配置...
</VirtualHost>
(3). 重启Apache:
bash
复制
sudo systemctl restart apache2
3.Nginx 配置
(1). 编辑站点配置文件(如/etc/nginx/sites-available/yourdomain):
nginx
复制
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /path/to/your_domain.crt;
ssl_certificate_key /path/to/your_private.key;
ssl_trusted_certificate /path/to/chain.crt; # 可选
加密协议优化(可选)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
其他配置...
}
(2). 重新加载Nginx:
bash
复制
sudo nginx -s reload
(3). 强制HTTP重定向到HTTPS
Apache:
apache
复制
<VirtualHost *:80>
ServerName yourdomain.com
Redirect permanent / https://yourdomain.com/
</VirtualHost>
Nginx:
nginx
复制
server {
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}
4. PHP中检测HTTPS
在PHP代码中检查是否通过HTTPS访问:
php
复制
if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
header("Location: https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
exit();
}
5. 验证SSL配置
在线工具:使用 SSL Labs SSL Test 检查配置。
命令行验证:
bash
复制
curl -I
https://yourdomain.com
openssl s_client
connect yourdomain.com:443
6. 其他注意事项
自动续签(Let's Encrypt):使用Certbot工具自动化证书管理:
bash
复制
sudo certbot --apache # Apache
sudo certbot --nginx # Nginx
PHP cURL请求:若PHP作为客户端调用HTTPS接口,需配置CA证书路径:
ini
复制
; 在php.ini中设置
openssl.cafile = /etc/ssl/certs/ca-certificates.crt
上面五个步骤SSL证书就可以配置完成了,然后你的网站就可以通过HTTPS安全访问了,随后PHP应用也能正确处理加密请求了,确保了定期更新证书以维持安全性。