乐投letou规划资源博客

品尝经典包装规划,版式规划,共享有用规划资源、规划软件、插件下载及在线生成
登录注册 联络协作 投稿

乐投letou » 教程技巧 » wordpress全站敞开https拜访及主动请求免费ssl证书教程
巧匠讲堂

wordpress全站敞开https拜访及主动请求免费ssl证书教程

网站敞开https拜访有什么优点?听说https能够避免网络运营商绑架、还有便是https更安全、再则谷歌百度等大佬喜爱,所以网站敞开https是种趋势。今日给咱们共享一下wordpress全站敞开https拜访及主动请求免费ssl证书教程,内容经过收拾并测验无误。…

网站敞开https拜访有什么优点?听说https能够避免网络运营商绑架、还有便是https更安全、再则谷歌百度等大佬喜爱,所以网站敞开https是种趋势。今日给咱们共享一下wordpress全站敞开https拜访及主动请求免费ssl证书教程,内容经过收拾并测验无误。

wordpress全站敞开https拜访及主动请求免费ssl证书教程

什么是HTTPS

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为方针的HTTP通道,简略讲是HTTP的安全版。即HTTP下参加SSL层,HTTPS的安全根底是SSL,因而加密的具体内容就需求SSL。

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文办法发送内容,不供给任何办法的数据加密,假如攻击者截取了Web浏览器和网站服务器之间的传输报文,就能够直接读懂其间的信息,因而HTTP协议不合适传输一些灵敏信息,比方信誉卡号、暗码等。

为了处理HTTP协议的这一缺点,需求运用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的根底上参加了SSL协议,SSL依托证书来验证服务器的身份,并为浏览器和服务器之间的通讯加密。

HTTPS和HTTP的差异主要为以下几点:

  1. http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
  2. http和https运用的是彻底不同的衔接办法,用的端口也不一样,前者是80,后者是443。
  3. http的衔接很简略,是无状况的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

要敞开网站https拜访,则首先要请求SSL证书。

SSL证书有免费的,也有收费,假如你是买卖型网站,主张购买收费型的SSL证书。

一般网站免费SSL证书即可。闻名的有百度云、阿里云、腾讯云、Let's Encrypt都供给免费的SSL证书请求服务。

百度云免费SSL证书请求地址:https://console.bce.baidu.com/cas/#/cas/apply/create

百度云的是赛门铁克的免费 1 年单域名证书,请求页面难找!不熟悉的用户肯定蒙圈!点开购买地址之后,挑选【Symantec】并提交:

https

阿里云SSL证书请求地址https://common-buy.aliyun.com/?commodityCode=cas

阿里云运用的是赛门铁克的免费 1 年单域名证书,请求页面也挺难找,并且在购买页面,略显费事,点开购买地址后挑选【免费 DV SSL】并提交:

ssl3

腾讯云SSL请求地址:https://console.qcloud.com/ssl/apply

请求十分简略,翻开页面并登陆之后点击请求证书,填写要请求的域名之后在解析一个 DNS 记载用于验证,十分钟不到就能够颁布证书了!假如是运用 dnspod 或腾讯云解析的域名,则能够全主动验证,坐等颁布即可。

ssl2

上述三家供给的都是和赛门铁克协作的免费证书,现已能够满意大部分网站 https 化的需求了,美中不足的便是需求 1 年续期一次。

假如你爱折腾,则还能够考虑Let's Encrypt的免费证书,Let's Encrypt的免费SSL证书是3 个月有用期,协作acme.sh 脚本东西能够完结主动请求、主动续期也算是比较完美了。

Let's Encrypt免费证书

Let's Encrypt 合适有一点指令行根底或许学习才能比较强的朋友运用,现在最盛行的是 acme.sh 这个主动布置、主动续期小脚本。

中文教程地址:https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E

下面共享一下centos+nginx上运用acme.sh装置请求免费Let’s Encrypt证书的的进程。

1、先运转下面的指令装置acme.sh脚本东西

curl https://get.acme.sh | sh

或许
wget -O -  https://get.acme.sh | sh

或许从 Git 装置下载项目并装置:
git clone https://github.com/Neilpang/acme.sh.git
cd ./acme.sh
./acme.sh –install

上面3种装置办法,一种不可就测验别的一种。

装置进程包括 3 个动作:

  • 帮你装置acme.sh到~/.acme.sh/。全部的证书都会放到这个目录中
  • 创立别号: acme.sh=~/.acme.sh/acme.sh
  • 创立每天的守时使命检查证书,假如快要到期了会主动更新

守时使命示例:

0 0 * * * "/home/user/.acme.sh"/acme.sh --cron --home "/home/user/.acme.sh" > /dev/null

acme.sh 会保存 API 参数并生成守时使命,用于每天验证证书是否行将过期,并及时更新。你能够经过 crontab -e 看到的新增的守时使命:

0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

2、acme.sh装置完结后,检查一下是否装置好了

#直接运转

acme.sh

#如报错请运转如下指令,重载一下.bashrc让acme.sh收效

source ~/.bashrc

3、用http验证办法请求SSl证书

acme.sh 支撑http 和 dns 验证协议. 不过个人感觉http 办法比较便利,所以这儿以这种办法为例。

选用http办法时,acme.sh 会主动在网站根目录生成验证文件, 然后主动完结验证,最终主动删去验证文件。

需求指定域名和域名对应的网站根目录(下例中/home/wwwroot/mydomain.com/便是www.mydomain.com网站的根目录,需求依据用户自己的网站途径设置):

acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/

上面这段指令解释一下,-d后边带的是域名,有不同子域名能够写多个-d,--webroot(也能够直接写-w)后边带的是网站根目录。

上面这条指令运转进程将会往/home/wwwroot/mydomain.com/目录里创立一个.well-known 的文件夹,一同 Let’ s Encrypt 将会去拜访 https://www.mydomain.com/.well-known/和http://www.mydomain.com/.well-known/ 这个途径(指令里每个-d 后边的域名都会拜访)。

所以咱们需求保证/home/wwwroot/mydomain.com/是在 Nginx的装备文件上是装备成 root 目录,里边恣意文件能够直接域名拜访的。

假如实际运用,请必须换成您自己的域名,还有域名的网站根目录。

假如上述指令履行无错,那么便是帮你主动请求好了SSL证书(假如你去.acme.sh文件夹看看,会发现证书现已躺着里边了)

acme.sh问题描绘:对 *.baidu.com 请求了通配符域名,可是在拜访 https://baidu.com 是时分出问题。

处理办法:必须在请求证书时一同指定根域名 baidu.com 和通配符域名 *.baidu.com 两个域名,这样生成的证书才是完好的通配符证书。

遇到问题不要慌,经过 --debug 2 选项能够直接在终端上显现具体日志:

acme.sh --issue --debug 2 --dns dns_dp -d baidu.com -d *.baidu.com

4、装置证书

证书请求好后,需求把证书 copy 到真实需求用它的当地。

默许生成的证书都是放在装置目录.acme.sh/ 下,可是请不要直接运用。而是运用 --installcert 指令装置证书。

运用 --installcert 指令装置证书时,证书文件会被复制到相应的方位:(请把域名换成自己的域名,一同留意那两个途径要和你放证书的文件共同)

acme.sh --installcert -d baidu.com -d *.baidu.com \

--keypath /home/ssl/baidu.com/baidu.com.key \

--fullchainpath /home/ssl/baidu.com/fullchain.cer \

--reloadcmd "sudo service nginx force-reload"

其间的途径以及reloadcmd指令需求依据你的体系以及网站途径自行修正,WDCP的reloadcmd指令改为--reloadcmd  "service nginxd force-reload"

5、装备nginx,修正你的网站装备文件(留意其间的途径需求与你的SSL证书途径共同)

Nginx 的装备 ssl_certificate 运用 fullchain.cer,而非 <domain>.cer,不然 SSL Labs 的测验会报 Chain issues Incomplete 过错。

server {

listen 80;

listen 443 ssl;

server_name  www.baidu.com;

ssl on;

ssl_certificate /home/ssl/baidu.com/fullchain.cer;

ssl_certificate_key /home/ssl/baidu.com/baidu.com.key;

ssl_session_timeout  5m;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

ssl_prefer_server_ciphers  on;

if ($scheme != 'https') {

# rewrite ^(.*)$  https://$server_name$1 permanent;

return 301 https://$server_name$request_uri;

}

}

到这儿,网站的服务器部分就装备好了(留意,改了服务器装备后需求重启Nginx服务让设置收效),下面部分便是网站程序部分了。

6、修正 wordpress后台的https地址

登陆wordpress后台,将“设置”-“惯例”里边的“WordPress 地址(URL)”、“站点地址(URL)”两个地址的 http 修正为 https 并保存。

ssl1

7、修正wordpress后台的多媒体url地址

“设置”-“多媒体”菜单把“文件的完好 URL 地址”也改为 https 协议,假如文件的完好 URL 地址之前是缺省的,那么也就能够不必修正。

8、把曾经文章中的图片地址,链接改为https地址。

假如文章太多,手艺修正不太实际,这时能够经过数据库 SQL 查询履行一条替换指令,代码如下(留意替换为你自己的网址):

update wp_posts set post_content = replace(post_content, 'http://www.baidu.com','https://www.baidu.com');

假如惧怕操作数据库,则能够用下面的代码法(复制到functions.php中,3种办法,任选一种)。

//WordPress SSL HTTPS 肯定链接替换

add_filter('get_header', 'wp_ssl');

function wp_ssl(){

if( is_ssl() ){

function wp_ssl_main ($content){

$siteurl = get_option('siteurl');

$upload_dir = wp_upload_dir();

$content = str_replace( 'http:'.strstr($siteurl, '//'), 'https:'.strstr($siteurl, '//'), $content);

$content = str_replace( 'http:'.strstr($upload_dir['baseurl'], '//'), 'https:'.strstr($upload_dir['baseurl'], '//'), $content);

return $content;

}

ob_start("wp_ssl_main");

}

}

或许

//WordPress SSL HTTPS 相对链接替换

add_filter('get_header', 'wp_ssl');

function wp_ssl(){

if( is_ssl() ){

function wp_ssl_main ($content){

$siteurl = get_option('siteurl');

$upload_dir = wp_upload_dir();

$content = str_replace( 'http:'.strstr($siteurl, '//'), strstr($siteurl, '//'), $content);

$content = str_replace( 'http:'.strstr($upload_dir['baseurl'], '//'), strstr($upload_dir['baseurl'], '//'), $content);

return $content;

}

ob_start("wp_ssl_main");

}

}

或许

//将全部超链接改为相对形式
if(!is_admin()){
ob_start("rewrite_urls");
}
function rewrite_urls($buffer){
$buffer= preg_replace('/("|\')http(s|):\/\/([^"\']*?)'.$_SERVER["HTTP_HOST"].'/i','$1//$3'.$_SERVER["HTTP_HOST"],$buffer);
return $buffer;
}

到这儿,基本上网站前台就敞开了https拜访,可是你或许还会遇到如下的状况:

  • 网站CSS款式丢掉,页面排版紊乱,图片打不开;
  • wordpress/wp-admin 后台进不去,“登录时提示重定向过多”;

9、遇到这样的状况,那咱们还要修正网站根目录的wp-config.php文件,增加

define('FORCE_SSL_LOGIN', true);

define('FORCE_SSL_ADMIN', true);

增加上面的代码后,正常状况后台应该能够翻开了,CSS款式也回来,页面也不紊乱了。

到这儿就彻底完结了 WordPress 站点敞开 HTTPS,假如在 360浏览器、谷歌浏览器等翻开地址栏前未显现绿色小锁图标,那么阐明你的网站加载了非 SSL 引进的资源,这时分就能够用谷歌浏览器翻开你的网站,然后按F12渐渐去检查并修正网站中存在的肯定链接了,这是个力气活…..主张咱们细心排查。

附:将全部流量一致导入 https://www.baidu.com,装备示例如下:

server {

listen 443 ssl;

server_name www.baidu.com;

index index.html;

root /home/baidu/www;

ssl on;

ssl_certificate /etc/nginx/ssl/fullchain.cer;

ssl_certificate_key /etc/nginx/ssl/baidu.key;

ssl_session_timeout 5m;

}

server {

listen       80;

server_name  www.baidu.com;

return 301 https://$host$request_uri;

}

server {

listen  80;

server_name baidu.com;

return 301 https://www.baidu.com$request_uri;

}

server {

listen  443 ssl;

server_name baidu.com;

return 301 https://www.baidu.com$request_uri;

}

整站301跳转

整站假如启用HTTPS后运转正常,就能够开端考虑进行整站301跳转了。假如是Apache+nginx双引擎服务器,能够在.htaccess文件增加如下代码:

RewriteEngine On

RewriteCond %{SERVER_PORT} 80

RewriteRule ^(.*)$ https://www.baidu.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^baidu.com [NC]

RewriteRule ^(.*)$ https://www.baidu.com/$1 [L,R=301]

假如你还要考虑落后的IE浏览器,咱们能够把IE8以下的版别都扫除在外,让它们妥妥的滚去拜访 HTTP 吧!

#网站定制化敞开 HTTPS 的301重定向

RewriteCond %{SERVER_PORT} !^443$

RewriteCond %{HTTP_USER_AGENT} !MSIE/[1-8]\. [NC]

RewriteCond %{HTTP_HOST} www.baidu.com

RewriteRule ^.*$ https://www.baidu.com%{REQUEST_URI} [L,R=301]

假如是Nginx服务器,在nginx.conf装备如下代码(如上文的设置中存在的话就不必增加了):

server {

listen 80;

server_name www.baidu.com;

return 301 https://$server_name$request_uri;

}

关于的Nginx return、rewrite在永久重定向上的差异能够看看这篇

网站https进阶装备

上面的 nginx 装备代码完结了全站https重定向,即运用户输入的是http,也会重定向到https地址上。但假如有时分咱们有特别需求,例如某些页面https拜访,某些页面又不需求https拜访,这时分就要差异对待了,咱们能够参阅下面的代码修正。

打赏

假如本站对您有所协助,请考虑对本站进行小额捐献:

https1
相关内容

宣布谈论

怎样下载本站资源『全部留言都会被审阅,请勿发布废物谈论』

(必填)*

魔镜插件