在安装SSL证书时踩了无数个坑之后,终于搞定了。立文纪念。
注意前提条件:
- 有一个已经备案的站点 。
- 有已经申请下来的SSL证书,且已经下载到本地。
只有满足上述两个条件才可以试用下面的教程。关于怎么备案网址和申请ssl度娘一大堆。不赘述。
操作环境:
Apache 2.4 / Nginx 1.24 CentOS 7
Apache配置步骤:
我用的WinSCP工具。
先在服务器中的apache根目录下新建cert文件夹,并将下载的Apache证书、证书链和秘钥文件拷贝到cert目录中 。
.crt扩展名的证书文件采用 Base64-encoded的PEM格式文本文件,可根据需要修改成 .pem等扩展名。
然后打开apache/conf/httpd.conf, 在httpd.conf文件中,crtr+F找到并设置以下参数(如果前面有#号,把#删掉):
#删除行首的配置语句注释符号“#”。加载mod_ssl.so模块启用SSL服务,Apache默认是不启用该模块的。如果找不到该配置,请重新编译mod_ssl模块。
LoadModule ssl_module modules/mod_ssl.so
#删除行首的配置语句注释符号“#”。
Include conf/extra/httpd-ssl.conf
保存,退出。
打开 Apache/conf/extra/httpd-ssl.conf 。 在httpd-ssl.conf文件中 ,在最底下添加以下代码:
说明: 根据操作系统的不同, httpd-ssl.conf文件也可能存放在 conf.d/ssl.conf目录中。
<VirtualHost *:443>
ServerName www.example.com
ServerAlias example.com
DocumentRoot "这里填你www根目录"
#ErrorLog "logs/wordpress-error_log"
#CustomLog "logs/wordpress-access_log" common
SSLEngine on
SSLHonorCipherOrder on
# 添加SSL协议支持协议,去掉不安全的协议:
SSLProtocol all -SSLv2 -SSLv3
# 使用此加密套件:
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
# 将 ***_public.crt 替换成你的证书文件名:
SSLCertificateFile cert/ ***_public.crt
# 将 ***.key替换成您证书的秘钥文件名:
SSLCertificateKeyFile cert/***.key
# 证书链开头如果有#字符,请删除。
SSLCertificateChainFile cert/***_chain.crt
</VirtualHost>
然后重启apache服务器。我比较硬核,连带着服务器也重启了。。。
访问本站:lzyz.fun
好看的小绿锁 ~
Nginx配置步骤
一般来说nginx安装在服务器的/etc/nginx/路径下,在/conf.d下新建cert文件夹,然后将证书放进去。
接下来修改配置文件default.conf,注意先把旧的配置备份。
# 第一个 server 块,用于将 HTTP 请求重定向到 HTTPS
server {
listen 80 default_server; # 监听 HTTP 端口 80
listen [::]:80 default_server;
server_name lzyz.fun; # 这里写你的域名
if ($http_host !~ "^www\.lzyz\.fun$"){
rewrite ^(.*) https://lzyz.fun$1 break;
}
return 301 https://$host$request_uri; # 所有 HTTP 请求重定向到 HTTPS
}
# 第二个 server 块,启用 HTTPS,并设置 SSL 证书和密钥
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name lzyz.fun;
ssl_certificate /etc/nginx/conf.d/cert/lzyz.fun.pem;
ssl_certificate_key /etc/nginx/conf.d/cert/lzyz.fun.key;
ssl_protocols TLSv1.2 TLSv1.3; # 支持的 SSL 协议版本
ssl_session_cache shared:SSL:10m; # 缓存 SSL 会话
ssl_session_tickets off; # 禁用 SSL 会话票据
ssl_prefer_server_ciphers off; # 关闭优先使用服务器的加密套件
root /your_web_root; # 你网站的项目根目录
index index.php index.html index.htm index.nginx-debian.html; # 默认文档索引
# 处理站点根目录下的请求
location / {
proxy_pass http://yourIp:port;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
#规则:禁用不必要的http方法:DELETE、PUT、TRACE、OPTIONS等
limit_except GET POST HEAD{ deny all;}
}
# 规则:使用安全的加密套件
ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES256-SHA:HIGH:!MEDIUM:!LOW:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:@STRENGTH';
error_log /var/log/nginx/example.yourdomain.com-error.log error;
access_log /var/log/nginx/example.yourdomain.com-access.log;
include extra/*.conf;
# 处理特定的 /contact.php 请求
location = /contact.php {
try_files $uri $uri/ /index.php?$query_string; # 尝试找到文件,否则重定向到 index.php
}
}
重启nginx即可
更新(证书过期续期办法)
SSL证书过期续期办法:首先在阿里云找到SSL的界面,点击这里
填写免费申请表单:
点击下一步出现如下:
解释下 ,这里的东西需要在阿里DNS页面配置进去:
主机记录写TXT,记录值复制好添加进去。
等阿里的通知邮件,成功后下载SSL证书
然后按部署步骤重新将原来的证书替换掉即可。
更新2.0 :
华为云文档里有各种类型证书安装方法,强烈推荐。
SSL证书使用概述:
https://support.huaweicloud.com/usermanual-ccm/ccm_01_0073.html
在Nginx服务器上安装SSL证书:
https://support.huaweicloud.com/usermanual-ccm/ccm_01_0082.html
Apache服务器上安装SSL证书:
https://support.huaweicloud.com/usermanual-ccm/ccm_01_0083.html