欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS

HTTP 协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的 HTTP 的网站是不太安全的。所以, Google 的 Chrome 浏览器将在 2017 年 1 月开始,标记使用不加密的 HTTP 协议的网站为 Not Secure,不安全。

现在你要做的就是让网站支持 HTTPS,并不难,而且现在可以免费做到。要使用 HTTPS,你需要安全机构颁发的安全证书,然后配置服务器,去使用这个证书。下面介绍一下在阿里云免费申请安全证书,还有配置一般的 NGINX 服务器支持 HTTPS 的方法。

申请证书

  1. 登录:阿里云控制台,产品与服务,证书服务,购买证书。
  2. 购买:证书类型选择 免费型DV SSL,然后完成购买。
  3. 补全:在 我的证书 控制台,找到购买的证书,在操作栏里选择 补全。填写证书相关信息。
  4. 域名验证:可以选择 DNS,如果域名用了阿里云的 DNS 服务,再勾选一下 证书绑定的域名在 阿里云的云解析。
  5. 上传:系统生成 CSR,点一下 创建。
  6. 提交审核。

如果一切正常,10 分钟左右,申请的证书就会审核通过。

申请证书要注意的是验证域名,就是你要验证你想绑定证书的域名是你自己的,如果选择使用 DNS 验证,你需要在域名的管理里,添加一条特定的 DNS 记录,这样就可以证名这个域名是你自己的。使用了阿里云的云解析服务,这个步骤可以自动完成,会自动为你添加一条 DNS 验证的记录。

输入证书要绑定的域名:

填写个人信息:

在域名的管理里,因为我用了阿里云的 DNS 解析服务,所以会自动添加一条 CNAME 记录,这条记录就是验证域名所有权用的:

下载证书

在阿里云的证书管理那里,如果申请的证书审核通过,你就可以下载了,点击 下载,可以选择不同的类型,可以选择 NGINX,或 Apache 之类的服务器。根据自己网站的 Web 服务器类型,下载对应的证书。解压以后,你会得到两个文件一个是 *.key,一个是 *.pem。

配置 NGINX 的 HTTPS

有了证书,就可以去配置 Web 服务器去使用这个证书了,不同的 Web 服务器地配置方法都不太一样。下面用 NGINX 服务器作为演示。我的域名是 ninghao.org,出现这个文字的地方你可以根据自己的实际情况去替换一下。

下载并上传证书

创建一个存储证书的目录:

sudo mkdir -p /etc/nginx/ssl/ninghao.org

把申请并下载下来的证书,上传到上面创建的目录的下面。我的证书的实际位置是:

/etc/nginx/ssl/ninghao.org/213985317020706.pem
/etc/nginx/ssl/ninghao.org/213985317020706.key

NGINX 配置文件

你的网站可以同时支持 HTTP 与 HTTPS,HTTP 默认的端口号是 80,HTTPS 的默认端口号是 443。也就是如果你的网站要使用 HTTPS,你需要配置网站服务器,让它监听 443 端口,就是用户使用 HTTPS 发出的请求。

下面是一个基本的监听 443 端口,使用了 SSL 证书的 NGINX 配置文件,创建一个配置文件:

touch /etc/nginx/ssl.ninghao.org.conf

把下面的代码粘贴进去:

server {
  listen       443;
  server_name  ninghao.org;
  ssl          on;
  root /mnt/www/ninghao.org;
  index index.html; 

  ssl_certificate   /etc/nginx/ssl/ninghao.org/213985317020706.pem;
  ssl_certificate_key  /etc/nginx/ssl/ninghao.org/213985317020706.key;
  ssl_session_timeout 5m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
  ssl_prefer_server_ciphers on;
}

上面的配置里,ssl_certificate 与 ssl_certificate_key 这两个指令指定使用了两个文件,就是你下载的证书,解压之后看到的那两个文件,一个是 *.pem,一个是 *.key。你要把这两个文件上传到服务器上的某个目录的下面。

重新加载 NGINX 服务:

sudo service nginx reload

或:

sudo systemctl reload nginx

验证配置

在浏览器上输入带 https 的网站地址:https://ninghao.org

如果正确的配置了让服务器使用 SSL 证书,会在地址栏上显示一个绿色的小锁头图标。

点开那个小锁头,会显示安全连接,再打开 详细信息。

提示:

This page is secure (valid HTTPS).

打开 View certificate,会显示证书的相关信息。

搜索引擎优化

2015 年 5 月 25 日,百度发公告声明已全面支持 HTTPS 网页的收录,使用 HTTPS 的网页被认为更安全,所以在排名上会被优先。 百度还推荐使用 301 重定向,把网站的 HTTP 重定向到 HTTPS 。

前几天我让宁皓网支持 HTTPS,并观察了搜索量,并未受到影响。所以,至少不用担心换成 HTTPS 以后,搜索量会下降。不过百度的反应一般都比较慢,需要给他更长的时间。换成 HTTPS 的后两天,谷歌已经收录了 HTTPS 版本的首页,但是百度至今还没有反应。不管怎么样,使用 HTTPS 都是迟早要做的事情。

NGINX 配置使用 301 重定向:

server {
  listen        80;
  server_name   ninghao.org;
  return 301    https://$host$request_uri;
}

上面的配置会让对 HTTP 网页的请求,重定向到 HTTPS 版本的网页上。

评论

阿里云的ssl需要实名认证备案这些前提吗
不确定,不过这些应该都是基础的,不用担心。备案现在变得简单多了。
凡是国内的云服务商提供的 HTTPS 证书,都需要备案。
不错,正好用得上!
如果不是 阿里服务器 ,亚马逊服务器如何申请免费证书?
这个只需验证域名所有权,不用管服务器在哪。
SEO不清楚如何
SEO 应该不用担心,百度官方声明里提过,HTTPS 的页面更安全,所以排名会被优先考虑。
能出一个阿帕奇配置方法吗?我网站马上就要上线了,想直接用https
证书已经申请下来了
我没有在 Apache 上试过,在下载证书的时候,有个提示,让你选择 NGINX 或 Apache,在那个选择页面上,有一个配置教程。
请问,如果是在负载均衡SLB上使用需要额外做什么调整吗?
负载均衡有另一种配置的方法,你可以不必配置服务器,直接配置负载均衡,就是让负载均衡使用你申请的 SSL 证书。
有配置负载均衡的方法吗?
暂时先参考阿里云官方的文档吧。
好的 谢谢了~
别客气 :)
才刚学会建站,请问我用免费的空间,然后绑定的域名,怎么弄成https的呢,免费证书已经申请好了,手里做的有php的也有.net的网页,该怎么用证书呢,是本地修改?小白求教。。。谢谢您了
你可能不能自己控制,有可能是空间决定的你到底能不能用 SSL 证书。
用的空间的话,得看空间服务商有没有提供 SSL 或者说 HTTPS 的服务。一般不能自己配置。
皓哥,我按照上面的步骤配置了下,一直不生效,然后又按照阿里云给的操作配置了下 也不行。
仔细再检查一下,一定是哪里错了。证书的路径正常吗?有没有重启 NGINX? 再试试就能行了 :)
我反反复复查询了好几遍,两种方法都行不通,皓哥,会不会和阿里云的安全组或服务器环境有关呢?
我觉得不是。
行,我再试试。重新配置一下看看 ^_^
皓哥,找到原因了,我之前写到一块儿了,现在分别写到不同的 /etc/nginx/conf.d/conf 文件里就可以了 现在还有个问题:怎么把 http://kfzhengyu.com http://www.kfzhengyu.com https://kfzhengyu.com 重定向到https://www.kfzhengyu.com
参考文章:https://ninghao.net/blog/4488 ,最底下有关于 301 重定向的 NGINX 配置代码。
我记得你以前域名域名解析都在 DNSPOD上的,现在都转到阿里了吗? 这个免费证书不在买的域名或者不在阿里做的解析应该都可以用吧??
昨天刚刚发布了《HTTPS 与 HTTP2》https://ninghao.net/course/4539
为什么我的不行?
貌似我没有开启 SSL 443端口吧?
二级域名怎么用?是重新申请个证书还是怎么设置一下? 比如,现在 lekee.cc 已经可以用 https 现在有个 cdn.leeke.cc 这个域名也想用 Https 这个协议怎么办?
重新再为二级域名申请一个新的证书。
视频里301重定向的,http 定向 https 显示 将您重定向的次数过多
这个问题,是循环重定向了。把之前是 80 和 443 写在同一个 server 里面分开就好
王兄,对 HTTPS 这个视频补充下,比如大家以前都用WP DP 做的网站,域名都用http的,现在这些网站的域名要换成了 HTTPS 该怎么弄? 特别我官网用七牛的cdn 这个又该怎么办。。。一点小建议
嗯,我做了一个《HTTPS 与 HTTP2》 的视频,里面介绍了申请 SSL 证书,配置服务器使用 SSL 证书的方法。这样你的 WordPress 与 Drupal 网站就可以使用 HTTPS 访问了。https://ninghao.net/course/4539
其实,让网站使用 HTTPS,跟您用的网站系统没有关系,你只需要让你的网站服务器支持 HTTPS 就行了。正确的配置了 NGINX 服务器就可以了。
七牛 CDN 你应该需要单独到七牛那里去配置一下。因为这跟您自己的服务器没有关系。
这个我看了,你演示的页面应该只是 HTML,所以 ssl.ninghao.cc.conf Nginx 配置文件里没有关于 PHP 的配置
我想问下,对于已经被收录的其它页面,怎么做301跳转呢。
您指的是 http 跳转到 https 吗?具体还要看您的服务器,如果用的是 nginx,你可以为网站的配置再创建一个 server 区块,里面监听 80 ,里面用一个 return 301 https://$host$request_uri; 参考:https://talk.ninghao.net/t/nginx-https-301/5210/3 ,视频:https://ninghao.net/video/4544
我是这么写的,也能跳,但不知道对不对,您看可以吗, server { listen 80; server_name www.wxxcx5.com wxxcx5.com; #301 rewrite ^/(.*)$ https://www.wxxcx5.com/$1 permanent; }
有人这样试了下,说成功了。配置:if ($host = www.ninghao.net) { return 301 https://ninghao.net$request_uri; }
需要测试,我也不能确定到底怎么样才行。因为环境都不太一样。
另外,我用了百度云加速的cnd,这个不用管吧,我只管配制我的nginx
在百度云上搜搜看,有没有相关的说明与配置文档吧。
请问绑定的那个域名必须是主域名吗?二级域名可以吗?
二级域名也可以,不过你在申请证书的时候,域名应该是二级域名。
恩恩 可以了^_^
:)
王老师 为什么我都配置好了访问不到配置好的域名呢?域名的记录值是阿里发给的 我发现我都没用到我的ip啊 这是怎么回事呢?
这个网站可以直接申请免费证书,方便很多:https://freessl.org
new
重定向还直接访问还是会报400:The plain HTTP request was sent to HTTPS port 百度了以下: 把 ssl on;删掉, 直接直接在listen 443后面加ssl即可如: listen 443 ssl;
new
皓哥,您好,我是用Apache搭建的,按照官网上教程配置完成之后,apache服务无法打开。重装、试了网上的其他一些教程也不行,请问您可以给我一些建议吗?
new
普通分类: