虚拟主机如何安装 ssl?

2016-07-15 15:29:36 +08:00
 yuhaaitao
管理面板是 cpanel ,看到有 ssl 选项,这个该怎么部署呢?
共享 ip ,共享主机那种。

4840 次点击
所在节点    SSL
14 条回复
Tsuki
2016-07-15 15:33:38 +08:00
RqPS6rhmP3Nyn3Tm
2016-07-15 15:35:20 +08:00
Openssl 解决一切问题
yuhaaitao
2016-07-15 16:24:34 +08:00
@Tsuki 谢谢,还有专门的帮助文档。
yuhaaitao
2016-07-15 17:11:26 +08:00
安装好了,可是测试部通过。


参考这篇文章
https://www.sslforfree.com 生成的
https://www.ssllabs.com 测试结果有一条没过。
yuhaaitao
2016-07-15 17:12:11 +08:00


大图在这里
yuhaaitao
2016-07-15 17:21:36 +08:00
我在自己电脑上导入证书后, chrome 确实可以打开了,但是没有小绿锁。
怎么才能删除自己导入的那个证书?
yuhaaitao
2016-07-15 17:27:59 +08:00
yuhaitao.com/:11 Mixed Content: The page at 'https://yuhaitao.com/' was loaded over HTTPS, but requested an insecure stylesheet 'http://cdn.staticfile.org/normalize/2.1.3/normalize.min.css'. This request has been blocked; the content must be served over HTTPS.
yuhaitao.com/:102 Mixed Content: The page at 'https://yuhaitao.com/' was loaded over HTTPS, but requested an insecure image 'http://image.yuhaitao.com/ecb023ef1e7f_D230/68J58PIC93g.jpg'. This content should also be served over HTTPS.

在 ie 中已经删除了证书, chrome 给的提示是这个。
yuhaaitao
2016-07-15 17:56:07 +08:00
Mixed Content: The page at 'https://yuhaitao.com/happy-birthday-1/' was loaded over HTTPS, but requested an insecure stylesheet 'http://cdn.staticfile.org/normalize/2.1.3/normalize.min.css'. This request has been blocked; the content must be served over HTTPS.
(index):223 Mixed Content: The page at 'https://yuhaitao.com/happy-birthday-1/' was loaded over HTTPS, but requested an insecure image 'http://image.yuhaitao.com/ecb023ef1e7f_D230/68J58PIC93g.jpg'. This content should also be served over HTTPS.


现在主站已经可以出现小绿锁了,就是打开文章后就没有了,图片另存了一个域名。
stneng
2016-07-15 18:02:37 +08:00
@yuhaaitao 你页面调用的所有文件都要用上 ssl 才会有小绿锁的 但你 image.yuhaitao.com 没用 https 。
Showfom
2016-07-15 18:40:39 +08:00
cPanel 目前不但自己是 sub-CA 给每个 WHM 后台免费签发证书,而且早就支持 SNI 了
yuhaaitao
2016-07-15 18:52:44 +08:00
已经分别给主域名和图片域名分配了证书,现在已经可以全站 https 了,但是一个将原来文章的图片域名改成 https 太麻烦,有没有更好的办法。

https://www.logcg.com/archives/961.html 这篇文章只是介绍了 wordpress ,不知道 typecho 是否通用,另外也没找到 function.php 文件。

自从 CNNIC 颁发的子证书发生了中间人攻击这些事件之后, SSL 连接以及 HTTPS 变得越来越流行了。这时候我们从“使用 SSL 保护你的登录信息以及后台页面”变成了推荐“ SSL Everywhere ”,使用全局 SSL 加密,有效避免用户在访问网页的时候造成隐私的泄露。而且,根据谷歌站长的最新教程当中的介绍表示,使用 https 对 SEO 更有好处(国内就别想了,但谷歌的爬虫真的会更看重 Https 网站。)另外,升级到 Https ,也不需要在谷歌站长工具里做什么——支持平滑升级,唯一的缺点恐怕是收录会波动一小段时间。

谷歌支持到 HTTPS 的平滑迁移
谷歌支持到 HTTPS 的平滑迁移
这里,我们要感谢 StartSSL™ ,如果不是他们,恐怕我们这些微小站长个人博客博主就无缘 SSL 了。。

由于这个原因,落格不在使用 StartSSL 的免费证书了,而是转而使用备受关注的 Let ’ s Encrypt 项目,这样你可以很方便地获得个人免费证书。不过,如果你和我一样是把博客扔在虚拟主机,那我想你可能需要这个网站以支持虚拟主机的 cPanel 等后台配置。

对于如何申请证书这个问题,这里暂时略过不讲,总之这篇文章假定你至少拥有了一个有效签名的证书以及对应的域名。
关于 HTTPS 的那点不得不讲的事情

HTTPS 使用 443 端口来验证你的链接,通过 SSL 、 TLS 这种低层的加密技术来保证你的连接是安全的,由于 SSL 这种协议在 IP 层面上,所以建立安全握手的时候甚至还没有发生 HTTP 数据的交换,这就导致了 SSL 这个本身针对域名进行签名的证书却需求你有一个独立的 IP 地址。不过,现实很快就无情地证明—— IPv4 地址终究会被用尽。虚拟主机应运而生,这时候我们很庆幸的还能有一个独立的域名和空间,但 IP 地址却是共享的。

Web 服务器通过区分来自不同域名的请求来在同一 IP 的同一端口上提供不同的网站服务,这就导致了一个严重的问题:“ SSL 证书绑定给谁?”事实上虚拟主机确实很难支持 SSL ,一不小心就会导致同 IP 下的其他域名提示证书不正确。不过,现如今的主流浏览器都支持了一个新的协议: SNI 。

使用 SNI ,将允许 Web 服务器在同一 IP 上单独为每一个域名提供证书。
所以说,如果你想要在一个 IP 上绑定多个域名的证书,或者说你依旧使用着经济实惠的虚拟主机,想要绑定证书,那么就需要确定你的主机可以支持 SNI ——当然了,目前主流的服务器比如 Nginx 、 Apache 等都已经支持,唯独要点名的是 IIS 貌似还是不支持的。

至于浏览器, Safari 、 Chrome 、 Firefox 等知名浏览器都已经支持,要点名的是 IE 系列貌似 5678 都不太好使。

好了,扒完了背景,我们正式开始操作:

由于落格依旧是虚拟主机配置,这里我们讲如何用 cPanel 来开启 SSL :

一、开启 SSL 访问支持

登录你的 cPanel ,如果你的虚拟主机支持 SNI 技术(就看服务商给不给力了),那么你应该可以在 cPanel 面板中的“安全”分类里边找到“ SSL/TLS ”功能按钮。

“安全”分类里的“ SSL/TLS ”
“安全”分类里的“ SSL/TLS ”
点击进入之后你就会看到上传私钥公钥以及绑定域名的链接,依次进入上传之,然后选择去绑定链接里绑定自己的域名“ www ”即可。(这里要注意,如果你和落格一样使用的是一类证书,那么你应该没有资格签泛域名证书,裸域应该也是不行的。)

绑定之后,你的博客应该就已经能够使用 Https 来访问了,不过,这才刚刚开始。

二、开启访问 HTTPS 301 重定向

细心的你这时候一定会发现,你的网站这时候虽然支持了 HTTPS 访问,但是似乎也可以使用 HTTP 来访问,考虑到搜索引擎目前收录的都是你的 HTTP 链接,那么如果不做点什么的话恐怕这张 SSL 证书将会毫无用处!

我希望你的空间能够支持 .htaccess ,如果你的博客开启了伪静态的话,那八成你的空间是支持的。 :)

我们使用 .htaccess 文件来添加一个 301 重定向(其实还有其他各种迁移的办法,但是谷歌大爷官方推荐使用 301 重定向)将所有的 HTTP 流量使用 301 重定向到 HTTPS 上边去,当然,这样还有一个潜在的问题:国内百度等搜索引擎的爬虫不支持 HTTPS !

我很好奇,为什么在全世界都提倡 SSL Everywhere 的情况下,我国国内的互联网环境还是“明文走天下”,当然,这可能也跟那个“ Girl Friend Wall ”有关系吧……(不然不好和谐了啊~)所以,我们还要单独为国内的一些搜索引擎的爬虫定制一下规则,如果检测到他们的 UA ,那么就允许他们访问 HTTP 流量。

在你博客空间的 www 目录(有的可能是 public_html )下,找到 .htaccess 文件,编辑它,在里边填入下列代码:

1
2
3
4
5
#网站定制化开启 HTTPS 的 301 重定向
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{HTTP_USER_AGENT} !MSIE/[1-8]\. [NC]
RewriteCond %{HTTP_HOST} www.logcg.com
RewriteRule ^.*$ https://www.logcg.com%{REQUEST_URI} [L,R=301]
对了,考虑到巨硬的 IE 大爷,我们把 12345678 都排除在外,让它们妥妥的滚去访问 HTTP 吧,省的各种警告烦心。

三、开启登录和后台的强制 SSL

虽然有了整站的重定向,但我们不妨还是将 WordPress 本身自带的功能打开,以期更完善的兼容体验——毕竟是 301 重定向。

还是找到你网站根目录里边,这次要修改的文件是 config.php ,直接在这个文件的末尾另起一行,追加两行代码:

1
2
3
/* 强制后台和登录使用 SSL */
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);
四、站内链接支持

最主要的可能就是图片的问题了,你在上传到空间的附件都被 WordPress 标记为了绝对链接,而且全都妥妥的写入了 “ http://”。一般来讲,是需要用数据库替换的,不过这种方法有点小危险,我这里给你推荐另外一个不错的选择:使用代码让 WordPress 在加载附件之前将链接替换就好了!——毕竟,只是协议的问题,跟路径没有半毛钱的关系~

(我希望你使用了 WordPress 的子主题功能……)

找到当前主题下的 function.php 文件,编辑之,在里边代码的末尾追加如下代码:

1
2
3
4
5
6
7
8
/* 替换图片链接为 https */
function my_content_manipulator($content){
if( is_ssl() ){
$content = str_replace('http://www.logcg.com/wp-content/uploads', 'https://www.logcg.com/wp-content/uploads', $content);
}
return $content;
}
add_filter('the_content', 'my_content_manipulator');
另外,除了这个大头意外,你还需要关心站内的各种内链:

修改“菜单”当中的所有“自定义链接”为相对路径;
修改“设置”→“常规”里的“站点地址”和“ WordPress 地址”为 HTTPS ;
修改其他自己手贱写入的绝对链接地址……
stneng
2016-07-15 19:00:23 +08:00
试试这个
UPDATE wp_posts SET
post_content = replace(post_content, 'http://yuhaitao.com', 'https://yuhaitao.com');
猜的

还有 cdn.staticfile.org 这个 cdn 该换了。
yuhaaitao
2016-07-15 19:12:56 +08:00
@stneng 这个放到那个文件夹?
那个 cdn 不用了,但是不会删除,之前 wirdpress 时用的,现在已经转 typecho 了 。
stneng
2016-07-15 19:13:35 +08:00
在 mysql 中执行
记得备份哦

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/292712

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX