HTTPS,是一种通过计算机网络进行安全通信的传输协议。经由HTTP进行通信,但是利用SSL/TLS来加密数据包。网站升级HTTPS,在网站前面会有一把小锁,并且Google官方也承认过HTTPS是影响搜索排名的一个因素,那么如何将站点升级为HTTPS呢?本文的内容就介绍如何将部署在Nginx的WordPress全站升级为HTTPS。
文章目录
选择SSL证书
升级HTTPS,第一步就是获取一个SSL证书,我用的是Let’s Encrypt,免费,开放,支持自动更新。
在服务器配置SSL证书(Ubuntu 16.04 Nginx为例)
1.安装Nginx版本的Cerbot,Certbot有PPA,直接安装就好:
$ sudo apt-get update $ sudo apt-get install software-properties-common $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt-get update $ sudo apt-get install python-certbot-nginx
2.安装Nginx版本的证书:
$ sudo certbot --nginx
这一步需要你输入邮箱以及域名信息,邮箱用来接收证书即将过期的信息(3个月要更新一次)以及安全信息。域名则是你这个证书所应用的网址,如果提示Cannot find a VirtualHost matching domain,可能是你的Nginx里的server_name配置有误,看看是否正确指向了自己的域名。之后会让你选择Redirect还是No redirect,前者是将所有HTTP请求都重定向到HTTPS去。
用这个命令安装是让Certbot自动帮你修改Nginx配置文件实现HTTP变为HTTPS(方便,推荐使用),当然你也可以手动配置,通过命令sudo certbot –nginx certonly,这样你就可以自己来设置信息,官方文档参考:https://certbot.eff.org/docs。
设置证书自动更新
Certbot的证书有效期是90天,过了90天就得手动更新一次~但是它有自动更新机制,可以通过以下命令测试一下是否正常:
sudo certbot renew --dry-run
如果运行正确的话,那么你就可以设置shell+crontab来实现定时任务,以后也不用烦90天更新一次的事了~
1.在/root下新建一个update.sh:
#!/bin/bash last_run_time=0#上一次运行时间 date1=`date +%s`#这一次运行时间 interval_days_secs=$((87*24*3600))#87天 if [[ $((date1 - last_run_time)) -gt $interval_days_secs ]]; then#如果间隔超过87天 certbot renew#运行更新程序 sed -i '2 s/[0-9][0-9]*/'$date1'/' update.sh #更新上一次运行时间 fi
2.新建一个crontab任务(crontab -e),设置每天执行一次update.sh:
0 0 * * * /root/update.sh > /root/log 2>&1
3.重启crontab任务:
/etc/init.d/cron restart
修改非HTTPS资源
全部更新完后,如果前面已经变成了https,但是没有高亮成绿色(以Chrom为例),那么可能是你的页面还有非HTTPS资源。在Chrom中进入开发者工具(F12),选择Security,根据提示修改掉非HTTPS资源即可~:
更多图解适合新手教程请戳:手把手教你搭建自己的个人网站~
请问第二步
2.安装Nginx版本的证书:
填写的域名可以为泛域名吗?
好像楼主的方法只能在一个服务器升级一个域名,那请问如果,我准备升级https的几个域名指向同一服务器应该如何解决呢?
可以啊 nginx加几个server配置就好了
我是再运行 sudo certbot --nginx
它好像只能是更新证书了 不能添加证书
配置完后打开出问题了:”该网站的安全证书中的主机名与你正在尝试访问的网站不同“。请问这是什么原因。也是一直显示不安全
你在申请https证书的时候是不是把域名填错了
我发现了问题所在,我只要前面不加www就时安全的。这是什么原理啊大佬
因为你在nginx的配置里和Certbot里填的网址不一样,比如我要填exam.com,那就nginx和certbot里都填exam.com;如果你要www,就在前面都加上www就行
感谢回复 这些教程都很不错 很有用
另外我想知道会升了https之后会影响 ssr+bbr速度吗?
不会,不相关
这个写的再详细些就好了
过两天出个详细版的教程
显示证书无效是什么鬼。。腾讯云买的域名,已经申请过TrustAsia证书了
用的腾讯的免费证书还是Let’s Encrypt的?
选择Security,根据提示修改掉非HTTPS资源即可~
以上如何操作?
就是如果有非HTTPS资源,就把链接改成https的(在网站源码改或者文章内容改)
https设置完了绿了,但是界面崩了,图片显示不出来,排版混乱,大佬,这是咋回事
因为你有些资源(例如图片,css)还是http的,你需要把这些链接也改成https的
麻烦问一下,如果没有域名的话Nginx证书应该怎么安装啊?
没有域名不可以用https证书
作者你好,我都是按照您的步骤来的,执行
sudo certbot renew --dry-run命令后出现了以下结果:
/usr/lib/python3/dist-packages/ndg/httpsclient/subj_alt_name.py:22: UserWarning: Error importing pyasn1, subjectAltName check for SSL peer verification will be disabled. Import error is: No module named 'pyasn1'
warnings.warn(import_error_msg)
/usr/lib/python3/dist-packages/ndg/httpsclient/ssl_peer_verification.py:25: UserWarning: SubjectAltName support is disabled - check pyasn1 package installation to enable
warnings.warn(SUBJ_ALT_NAME_SUPPORT_MSG)
/usr/lib/python3/dist-packages/ndg/httpsclient/subj_alt_name.py:22: UserWarning: Error importing pyasn1, subjectAltName check for SSL peer verification will be disabled. Import error is: No module named 'pyasn1'
warnings.warn(import_error_msg)
Saving debug log to /var/log/letsencrypt/letsencrypt.log
-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/guochens.com.conf
-------------------------------------------------------------------------------
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator nginx, Installer nginx
Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for guochens.com
Waiting for verification...
Cleaning up challenges
-------------------------------------------------------------------------------
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/guochens.com/fullchain.pem
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/www.guochens.com.conf
-------------------------------------------------------------------------------
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator nginx, Installer nginx
Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for http://www.guochens.com
Waiting for verification...
Cleaning up challenges
-------------------------------------------------------------------------------
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/www.guochens.com/fullchain.pem
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates below have not been saved.)
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/guochens.com/fullchain.pem (success)
/etc/letsencrypt/live/www.guochens.com/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates above have not been saved.)
但是用https://www.域名.com访问是无法访问,不知道是什么问题?
这个没有遇到过 我现在已经改用cloudflare了。但是你如果之前的安装好了,就算不加自动更新的内容,https应该也是可以用的
哦哦,好的
博主,我发现之前443端口被占用了。。现在问题解决了,并且证书也安装了,但是用https://www.guochens.com打开chrome说是证书丢失是什么意思。。。
https://zhuanlan.zhihu.com/p/33518941
网上查了好多,找到了一个靠谱的cloudflare教程,亲测有效
我也有cloudflare的教程啊 使用Cloudflare免费https证书,还是非插件版的
之前没看到 你的更吊
下午注册了vultr,试了两个服务器完全ping不通啊,咋办
换新的location试试
升级https后提示不安全怎么解决
提示什么?证书不可信还是什么?
提示与网站链接不安全
用chrome之外的浏览器访问css都不能加载了 security提示This page is not secure (broken HTTPS).
是不是你css还是http的?
我手动改了style.css 还是不行
崩了,升级这个https,界面直接没有css一样崩了,然后删除证书后,直接不能访问了,重装软件都不行了,gg
不知道你是什么情况。
用certbot可以选择修改nginx的配置文件增加redirect,你也可以手动修改nginx的配置文件。
至于没有css,你可以看控制台报什么错,是mixed content吗?
重装软件又是什么意思?
我觉得我懂这兄弟是什么情况,他说的卸载应该是把证书删掉了
官方的文档里有这么一段:
Certificate Name shows the name of the certificate. Pass this name using the --cert-name flag to specify a particular certificate for the run, certonly, certificates, renew, and delete commands. Example:
certbot certonly --cert-name example.com
然后我就用certbot delete --cert-name example.com 把我证书删掉了
结果想重启nginx的时候就出现如下错误
Error while running nginx -c /etc/nginx/nginx.conf -t.
nginx: [emerg] BIO_new_file("/etc/letsencrypt/live/jinzizhang.top/fullchain.pem") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/letsencrypt/live/jinzizhang.top/fullchain.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file)
nginx: configuration file /etc/nginx/nginx.conf test failed
然后运行systemctl status nginx.s
出现如下错误:
Active: failed (Result: exit-code) since Tue 2018-09-18 08:14:27 UTC; 1min 14s ago
Sep 18 08:14:27 site-test systemd[1]: Failed to start A high performance web server and a reverse proxy server.
然后我修改了 nginx 配置文件
vim /etc/nginx/sites-available/default
把里面certbot修改的内容都删掉就能正常访问了