使用阿里云免费SSL证书实现全站HTTPS化

18

苹果和小程序开发都开始要求使用https服务,而且运营商广告注入也越来越疯狂。所以,实现网站https很用必要。

实现https就需要一个SSL证书。证书大部分都很贵,不过也有一些免费的证书服务供个人开发者使用,这是一个大好消息。比如腾讯云,七牛云,阿里云。

我们今天就拿阿里云来实践一下,因为我的服务器也在这里。

原文链接:https://weiya.me/item/66.html

购买SSL证书

首先第一步就是获取一个证书。来到阿里云购买证书页面。传送门:阿里云免费SSL地址

选择如下图的配置。其他的也买不起o(╯□╰)o

image

点击立即购买,然后下一步,直接支付就可以了。

image

看下支付成功

image

之后,去阿里云控制台,选择菜安全(云盾)->证书服务,可以找到刚刚的购买好的订单。

image

刚刚买好的订单,证书状态为待完成。需要点击补全链接进行补全。

补全信息

补全信息就是填写一些你的域名信息和你的个人信息,顺带验证下域名是你的。

第一步是填写域名。这里不能写通配符域名,需要写普通域名,就是类似于www.baidu.com或者images.baidu.com这种。

所以,当你需要多个二级域名的时候,你需要购买多个免费的SSL证书。

image

下一步,填写个人信息。

image

这里面要注意,红框内的域名验证类型。

  • DNS:是在域名解析记录里面添加一条记录来证明域名是你的。

  • 文件:是传一个文件到你的域名根目录方式来证明域名是你的。

其中如果选择DNS的,并且域名在阿里云的可以直接勾选下面的复选框,这样阿里云就会自动帮你填写域名解析记录,全自动。

点击下一步,进入生成CSR界面,这里为了简单,选择系统生成。点击创建自动创建。

image

查看状态

完成上面所有工作后。回到证书订单列表,信息会显示在审核中状态。点击进度可以查看之前步奏是否有问题。

如下状态是成功:

image

如果点击进度,弹出对话框如下。

image

注意红色字。说明,系统在域名解析中添加TXT记录存在冲突。那么说明你的域名中存在同名的CNAME记录。因为,CNAMETXT同名会冲突。

我们去域名解析界面看下:

image

果然,这里存在同名的CNAME。解决方案:

  1. 先删除CNAME,添加TXT记录,等到域名授权验证通过。这时再删除TXT,把CNAME写回来。

  2. 先把CNAME改为A记录(因为A记录和TXT不冲突),然后添加TXT。等到审核通过同上。

一切问题都解决了,下面就等签发。

安装服务器证书

等到签发完成后,我们直接点击对应域名的下载链接。

image

跳转到该界面,选择你对应的服务器,下载证书。我这里是apache

image

下载完成后,文件包内应该有4个文件。

image

我们去服务器apache安装的目录创建一个文件夹cert,在里面再创建一个文件夹admin(这里为了放多个域名证书,便于管理)。将刚刚下载的4个文件全部传到服务器。

提示: ubuntu服务器的apache默认安装目录为/etc/apache2

image

修改虚拟主机配置

证书文件传好了之后,我们需要使用证书。这里是在apache的配置文件中引用。

首先看一下之前的apache虚拟主机配置:

<VirtualHost *:80>
    DocumentRoot /var/www/admin/
    ServerName admin.bidianer.com
    <Directory "/var/www/admin/">
        Options FollowSymLinks
        AllowOverride all
        Order allow,deny
        Allow from all
    </Directory>
    ErrorLog "/mnt/bidianer_error.log"
    CustomLog "/mnt/bidianer_runtime.log" common
</VirtualHost>

这里的虚拟主机是80端口,而https走的是443接口,所以我们不能再使用之前的80端口配置。需要重新配置。但是,如果我们还想保留http访问,也想用https访问,那么就保留这个配置,再新建一个配置。

<VirtualHost *:443>
    DocumentRoot /var/www/admin/
    ServerName admin.bidianer.com
    <Directory "/var/www/admin/">
        Options FollowSymLinks
        AllowOverride all
        Order allow,deny
        Allow from all
    </Directory>
        SSLEngine on
        SSLProtocol TLSv1 TLSv1.1 TLSv1.2 SSLv3
        SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4
        SSLCertificateFile cert/admin/public.pem
        SSLCertificateKeyFile cert/admin/214082306780502.key
        SSLCertificateChainFile cert/admin/chain.pem
    ErrorLog "/mnt/bidianer_error.log"
    CustomLog "/mnt/bidianer_runtime.log" common
</VirtualHost>

解释: 上面这个配置是监听443端口,所以当使用https访问的时候会使用该配置。该配置大部分和上面的都相同,但是却多了这一段代码。

    SSLEngine on
    SSLProtocol TLSv1 TLSv1.1 TLSv1.2 SSLv3
    SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4
    SSLCertificateFile cert/admin/public.pem
    SSLCertificateKeyFile cert/admin/21408*****0502.key # 这里我隐藏了部分数字
    SSLCertificateChainFile cert/admin/chain.pem

这段代码就是告诉服务器使用刚刚我们下载好的证书。把其中的地址改为你的就可以了(尤其注意那串数字文件要记得改)

接下来重启apache服务器

/etc/init.d/apache2 restart

打开浏览器,使用https协议访问你的网站(这个https生效需要时间,时间不确定,所以不会立即可以访问)。我的https://www.bidianer.com。绿色图标出现,一切ok

image

CDN使用HTTPS

这部分内容不是必须的,是你使用了CDN服务才会用到

如果你在阿里云买了CDN,那么如何使用HTTPS。这个方法很简单,阿里云已经提供了。

在开始之前,首先记得把你的相关域名解析到阿里云的CNAME,这样才可以使用CDN,再谈CDN使用HTTPS

第一步,打开你的CDN域名列表

image

点击相关域名的配置链接,进入配置页面。

image

主要需要配置红框内两个内容。

回源设置

第一个回源设置

image

  • 其中源站信息,有3种选择,这里比较常用的是IP,选择后填写IP地址即可,端口选择443端口

  • 回源HOST,开启,选择加速域名。

  • 回源方式,开启协议跟随回源

这里说一下回源HOST,这个最好选择默认的加速域名,不要选择自定义,如果你当前的域名是www.bidianer.com,你自定义回源HOST为bidianer.com,那么在你网站中获取的网站host信息就是bidianer.com而不是www.bidianer.com

比如PHP中$_SERVER['HTTP_HOST']就是bidianer.com,而不是www.bidianer.com,会出问题有时候。

HTTPS设置

第二个HTTPS设置

image

  • 点击状态开启即可。

  • 选择你之前创建的相关域名证书。

  • 强制跳转可以选择自己想要的。

这里说下证书名称要和你的证书列表对应起来,否则会出错。证书名称在这里:

image

开始你的可能是一串乱七八糟的数字,最好修改一下,后面选择证书不会出错。

选错了证书会有啥问题?

image

浏览器地址栏会提示:

image

用户打开会是个警告页面,网站就倒闭了。

最后提醒下,CDN使用HTTPS也会有很长时间的延迟,不要着急

严颖,星空幻颖

2017.4.27


如果觉得我的文章对你有用,请随意赞赏

你可能感兴趣的

23 条评论
木子伟 · 2017年11月19日

(这个https生效需要时间,时间不确定,所以不会立即可以访问)
这句话是什么意思。apche配置重启后,https还不能立即生效?

回复

0

@木子伟 不是服务器这里,是服务提供商他有个时间延缓,一般很快,不会有问题

星空幻颖 作者 · 2017年11月21日
0

感谢作者的回复:
原文的配置
SSLEngine on

    SSLProtocol TLSv1 TLSv1.1 TLSv1.2 SSLv3
    SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4
    SSLCertificateFile cert/admin/public.pem
    SSLCertificateKeyFile cert/admin/214082306780502.key
    SSLCertificateChainFile cert/admin/chain.pem

这里我配置的时候出了点小问题。报了一个“客户端和服务器不支持一般 SSL 协议版本或加密套件”的错误。
解决方法:将原文的 SSLProtocol TLSv1 TLSv1.1 TLSv1.2 SSLv3
改成 SSLProtocol TLSv1 TLSv1.1 TLSv1.2
去掉 SSLv3
就可以了。(也可能是我服务器环境的问题)

木子伟 · 2017年11月22日
0

@木子伟 哈哈哈,谢谢。可能是环境不一致,不过多了一种解决方案。

星空幻颖 作者 · 2017年11月26日
EnterCxs · 2017年12月16日

为什么我的阿里云 云盾没有免费的证书??

回复

0

https://common-buy.aliyun.com... 这个地址你看看,有个免费的证书选项

星空幻颖 作者 · 2017年12月18日
0

你要选择赛门铁克品牌,他有免费的

星空幻颖 作者 · 2017年12月18日
0

好像都没有免费了

Waising · 2018年01月09日
LiuSx · 2018年03月08日

为什么一直报错 Unregistered Authentication Agent for unix-process:
ssl.conf 的配置 都是按阿里云手册来的

回复

0

你这个是在哪里报错的?

星空幻颖 作者 · 2018年03月14日
网贷族 · 2018年03月20日

阿里云的DNS好像是要钱的,我到这一步就停了,有没有用其他的DNS?

回复

0

https的好像都是收费的,而且之前买的一个包年的也没用。七牛也是收费

星空幻颖 作者 · 2018年03月22日
pure · 2018年04月02日

你好,我按照你说的来配置但还是不行。主要是在配置环境中是直接加上443端口配置信息,还是新建一个文件夹然后写入443的配置信息呢,如果是前者的话,我试了,不行,望指教。谢谢!

回复

0

私信已经回复啦~

星空幻颖 作者 · 2018年04月03日
AdAm大将军 · 2018年04月17日

感觉太复杂了,有没有一键就能设置的SSL ? ECS是在阿里云买的啊,域名也在阿里云,怎么会这么麻烦???

回复

0

现在阿里云域名那里好像有快捷设置方法,但是你的证书还是要上传到你的服务器,你的apache还是要引用你的证书,这里最复杂的阿里云做不了~

星空幻颖 作者 · 2018年04月18日
0

昨天偷懒 用的是 WordPress的镜像。。。。现在装SSL 彻底懵逼了。。。

AdAm大将军 · 2018年04月18日
0

@AdAm大将军 现在最复杂的也就是服务器这块,当初也是跳了无数坑才成功

星空幻颖 作者 · 2018年04月19日
勇敢的心 · 2018年05月14日

您好,看了您的帖子,写的很详细,学到了很多新知识 ,哈哈,
我现在也在配置服务器的配置,按照阿里云提供的文档配置的,可是重启服务器失败,error_log中显示”[error] Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile]“,试了很多种方法,可是依然报这个错误,你是否知道这个如何解决呢,感谢不已 :)

回复

inter18099 · 2018年12月12日

笔点是你的网站啊。以前就有关注。以前是设计师程序员的导航,现在变成一般导航了。

回复

0

哈哈哈,是的啊,现在工具属性更强。可能资源收集被弱化了,所以看起来变的不那么专业性强了~

星空幻颖 作者 · 2018年12月28日
光年一夏 · 10月7日

请问tocmat怎么配置啊,头都大

回复

载入中...