教程 - 部署网站——SSL证书的申请与安装(https协议)

环境:
系统环境是阿里云的轻量应用服务器,CentOS系统(Linux),httpd版本
本文内容

  • 证书申请
  • 证书安装
  • htttp重定向



上篇:从零开始部署网站——阿里云主机CentOS系统


请按需查看:

  • 前言
  • 参考
  • 阿里云免费证书申请
  • httpd的证书安装
  • http重定向https
  • 异常解决
  • 后言

前言

上一篇说只是简单的将网页部署到主机上,本篇我们将给网站安装SSL证书,有了SSL证书我们就可以使用https协议来访问网站了。

为什么需要https呢,这个是比较全面的解答

而我是因为一个理由:Android的网络请求都必须走https协议。




本篇文章是面向2019年2月4日之后但不限于之前用 yum 安装 httpd 的教程,可能与网上大部分资料有所不同。
对应的httpd版本为
httpd-2.4.6-88.el7.centos.x86_64
查询httpd版本指令: rpm -qa|grep http

参考

CentOS服务器下安装配置SSL
apache环境下配置多个ssl证书搭建多个站点
网站重定向-http怎么重定向到https最全解决方案


阿里云免费证书申请

在阿里云首页直接搜索证书就可以进入购买界面了
教程 - 部署网站——SSL证书的申请与安装(https协议)_第1张图片
别给5600多块吓到了,你先点击 1个域名 ,然后再点击 Symantec 就有个免费SSL证书可以选
教程 - 部署网站——SSL证书的申请与安装(https协议)_第2张图片


免费证书只能绑定一个子域名。
比如说我想给www.a.com和m.a.com两个子域名安装证书的话就需要购买2个证书了
在购买页面的下面可以选择购买数量
一次最多购买10个,一个阿里云账号最多能有20个免费证书
教程 - 部署网站——SSL证书的申请与安装(https协议)_第3张图片

购买完成之后进入控制台,点击申请,然后在右边填好信息就进入审核了(一般5分钟内),审核通过会通过短信告知你的
www.a.com和a.com可以共用一个证书
教程 - 部署网站——SSL证书的申请与安装(https协议)_第4张图片

审核通过后在已签发里点击下载,我们选择Apache(httpd)
教程 - 部署网站——SSL证书的申请与安装(https协议)_第5张图片
下载完后我们就可以开始最难的安装部分了



httpd的证书安装

首先运行指令:yum install mod_ssl 安装SSL模块。
安装完后可以用https协议进入自己的网站看看
教程 - 部署网站——SSL证书的申请与安装(https协议)_第6张图片
出现这个的原因是目前使用的是SSL模块默认的证书

我们先把证书上传至主机,路径随意,我喜欢放在/etc/httpd/cert。而且最好简化一下文件名( 不要把后缀给简化了)
教程 - 部署网站——SSL证书的申请与安装(https协议)_第7张图片

然后我们修改/etc/httpd/conf.dssl.conf文件
在最下面添加这样的代码 # 为注释


ServerName Basic a #起个能记起来的名字就行
ServerAlias www.a.com a.com #你要配置的域名
DocumentRoot "/var/www/html" #域名对应的绝对路径
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
SSLCertificateFile /etc/httpd/cert/www.a.com_public.crt   #证书公钥配置
SSLCertificateKeyFile /etc/httpd/cert/www.a.com.key  #证书私钥配置
SSLCertificateChainFile /etc/httpd/cert/www.a.com_chain.crt  #证书链配置
  #域名对应的绝对路径
Options FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted

      

如果有多个子域名要安装SSL证书,那就复制上面的代码修改部分即可


ServerName Mobile a #起个能记起来的名字就行
ServerAlias m.a.com #你要配置的域名
DocumentRoot "/var/www/html/m" #域名对应的绝对路径
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
SSLCertificateFile /etc/httpd/cert/m.a.com_public.crt   #证书公钥配置
SSLCertificateKeyFile /etc/httpd/cert/m.a.com.key  #证书私钥配置
SSLCertificateChainFile /etc/httpd/cert/m.a.com_chain.crt  #证书链配置
  #域名对应的绝对路径
Options FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted

     

保存 执行指令:

systemctl restart httpd
如果控制台是这样就说明配置成功了
在这里插入图片描述
现在刷新一下你的网站吧
教程 - 部署网站——SSL证书的申请与安装(https协议)_第8张图片




http重定向https

先打开url重定向支持:
打开/etc/httpd/confhttpd.conf文件
搜索AllowOverride None,将Nome改为ALL
请修改对应HTML根目录下的AllowOverride
教程 - 部署网站——SSL证书的申请与安装(https协议)_第9张图片
然后在根目录添加 .htaccess 文件

打开.htaccess文件(网站根目录下的文件),写入如下规则:

RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} !^/tz.php
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R]

总体来说上面规则的意思是:
如果访问的url的端口不是443,且访问页面不是tz.php,则应用RewriteRule这条规则。这样便实现了:访问了 http://localhost/index.php 或者 http://localhost/admin/index.php 等页面的时候会自动跳转到 https://localhost/index.php 或者 https://localhost/admin/index.php,但是访问 http://localhost/tz.php 的时候就不会做任何跳转,也就是说 http://localhost/tz.php 和 https://localhost/tz.php 两个地址都可以访问

教程 - 部署网站——SSL证书的申请与安装(https协议)_第10张图片
刷新一下网站,是不是自动从http转到https了呢?
如果你直接输入网址(不带http),也是会直接转入https协议的喔!




异常解决

如果路径错误或者命名错误可能会导致重启失败
像下面这样
在这里插入图片描述

这个时候就需要按照提示输入(这里是journalctl -xe)打开错误日志了
可以看到是找不到文件,那就检查路径是否正确 / 路径下是否有文件 / 文件名是否正确 即可
教程 - 部署网站——SSL证书的申请与安装(https协议)_第11张图片

如果是某项文件里的设置导致的启动失败就会指出是哪个文件的哪一行




后言

真是千辛万苦才配置好SSL证书和写出这篇博文的。几天前在phpStudy里配置了一天都不行,只好转战CentOS,而又因为httpd的更新,已经和之前的配置大相径庭了

这篇18年1月的博文有一半是可以用的CentOS服务器下安装配置SSL
而这篇19年1月的官方文档却过时(不适用了)Apache服务器安装SSL证书

编写这篇博文的时候我电脑死机,忘记保存,直接回到一小时前。
但看到Android上的联网图片终于可以加载自己主机的图片了还是很惊喜的
教程 - 部署网站——SSL证书的申请与安装(https协议)_第12张图片




全文完。
就这么简单,同学们学会了吗?自己去试试看吧。

觉得学到了就在右边给我个赞和收藏呗。这是我更新的动力之一
在这里插入图片描述

你可能感兴趣的:(教程)