一、HTTP简介
从2018年7月1日开始,Chrome将显示所有未使用SSL证书的网站标记为“不安全”,而拥有SSL证书的网站的权重排名都会获得提升。
随着企业与网民网络安全意识的增加,全网正在走向全面https的时代,加密将无处不在,无论是网站、APP、软件、小程序等都在大规模应用SSL进行加密。
但Web服务器在默认情况下使用HTTP,这是一个纯文本的协议。正如其名称所暗示的,纯文本协议不会对传输中的数据进行任何形式的加密。而基于HTTP的Web服务器是非常容易配置,它在安全方面有重大缺陷。任何”中间人”,通过精心防止的数据包嗅探器,是能够看到任何经过的数据包内容。更进一步,恶意用户甚至可以在传输路径设置一个假冒的WEB服务器冒名顶替实际的目标Web服务器。在这种情况下,最终用户可能实际上与假冒者服务器,而不是真正的目的服务器进行通信。这样,恶意用户可以通过精心设计的表单欺骗终端用户获取到敏感信息,如用户名密码。
为了处理这些类型的漏洞,大多数供应商往往在他们的web服务器应用HTTPS协议。对于只读类型的网站,用户只能读取内容,并没有实际提交任何信息,HTTP仍然是一个可行的选择。但是,对于保存敏感信息的网站,比如:用户需要登录来获得网站的服务,那么HTTPS是必须的。
HTTPS能够为一个网站提供以下能力。
1、确保所有经过服务器传输的数据包都是经过加密的。
2、建立了一个官方数字证书证书,使得假冒服务器无法冒充真正的服务器。
二、HTTPS证书获取途径
1、自签名证书被推荐用于测试目的和个人项目。自签名证书,也可以用于服务提供商,不过一般适用于用户互相信任的情形。另外,自签名证书不用花钱购买。
2、11种免费获取SSL证书的方式,分别是阿里云SSL证书服务、百度云SSL证书服务、腾讯云SSL证书服务、华为云SSL证书管理SCM、站长安全认证证书服务、CloudflareSSL证书服务、滴滴云SSL证书服务、青云SSL证书服务、AlwaysonSSL、景安基础级DV、FreeSSL.org
经过亲测之后,个人推荐使用FreeSSL.org
FreeSSL.org是一个免费提供 HTTPS 证书申请、HTTPS 证书管理和 HTTPS 证书到期提醒服务的网站,旨在推进 HTTPS 证书的普及与应用,简化证书申请的流程,网址:https://freessl.org
三、APACHE中HTTPS服务部署
1、安装apache环境依赖
yum -y install mod_ssl openssl httpd
1
2、创建CA证书存放目录
mkdir /etc/httpd/ca
1
3、修改配置文件
vi /etc/httpd/conf.d/ssl.conf
1
主要的修改有3处,一是监听端口,这里最好使用默认的443
在这里插入图片描述
二是网站的根目录
三是证书的位置以及证书名称,可以使用默认,在创建的时候改成相应的名字
在这里插入图片描述
4、创建Apache的CA证书
进入存放证书的目录
cd /etc/httpd/ca/
1
创建自己的CA证书,注意:这里很多人喜欢使用rsa:4096,但在第三方平台上签署时一般都支持2048,所以不是越高越好openssl req -newkey rsa:2048 -nodes -sha256 -keyout ca.key -x509 -days 1095 -out ca.crt
1
-days 1095 正好是有效期3年
在这里插入图片描述
生成CA证书签名请求openssl req -newkey rsa:2048 -nodes -sha256 -keyout cert.key -out cert.csr
1
在这里插入图片描述
注意,所有的输入项中尽量使用英文,方便以后使用,同时两个地方的server’s hostname 必须填写你要使用的域名,不然以后想在第三方平台使用的话会提醒域名错误,造成签发不成功
生成注册主机的证书
openssl x509 -req -days 365 -in apache.xyc.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out cert.crt
1
将证书拷贝到配置文件中路径相对应的目录
//进入证书目录cd /etc/httpd/ca/
1
//拷贝证书到默认指定目录cp cert.crt /etc/pki/tls/certs/
cp cert.key /etc/pki/tls/private/
1
2
重启Apache服务,如果启动失败,请检查你的443端口是否被其他软件所占用systemctl restart httpd
1
最关键的一步别忘了添加防火墙规则firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload
1
2
5、访问测试(最好使用Firefox浏览器)
访问网页地址https://abc.com/,也就是你部署的网站地址
在这里插入图片描述
会提示连接不安全,原因是因为你使用的是自己签名的证书,没有被第三方所认可,但你可以点高级继续访问,到这里基本就算完工了,是不是感觉还不完美,想更好一点,那就继续
四、申请FREESSL证书
1、打开官网https://freessl.org,选择他们还有一个原因就是这里支持双域名的免费创建,是我认为最爽的一家,而且检测非常快,其他的很多都卡在域名检测这一块
在这里插入图片描述
2、填写你要部署的域名,只能使用主域名,其他的通不过,我这里写两个,中间用逗号隔开,然后点“创建免费的SSL证书”
在这里插入图片描述
3、填写你的邮件地址,然后证书类型选择RSA,验证选择文件验证,不然你要做域名解析,非常麻烦,在CSR生成这里,你可以使用浏览器生成,也可以使用自己的CSR,还记得刚才用openssl req -newkey rsa:2048 -nodes -sha256 -keyout cert.key -out cert.csr命令创建的CSR吗,直接打开并COPY进来就可以了
在这里插入图片描述
4、如果你在创建CSR时没有填写正确的域名,和现在申请的不对应就会报错
在这里插入图片描述
5、一切正常就会进入下一步,如果是选择的是浏览器生成会提醒你下载保管
在这里插入图片描述
6、进入域名验证环节,请按界面提示操作
在这里插入图片描述
7、最后点击“点击验证”按钮,验证通过就会生成证书并提示下载了
将证书填入服务器对应位置,也就是刚才我们设定的 /etc/pki/tls/certs/目录下的cert.crt,将CA证书内容复制进去,然后重启动HTTP
systemctl restart httpd
1
8、现在再来访问一下看,是不是完全不一样的感觉呢?
在这里插入图片描述
五、NGINX下的部署
方法基本差不多,关于证书部分就不作重复了,不过Nginx使用的是pem格式的证书,这个在申请第三方的下载包里有,直接使用就可以了,这里主要是讲部署
1、安装http_ssl_module模块,支持https
查看 nginx 是否安装 http_ssl_module 模块。
nginx -V
1
如果出现 configure arguments: –with-http_ssl_module, 则已安装(下面的步骤可以跳过,进入 nginx.conf 配置),没有话安装编译工具yum install gcc pcre-devel zlib-devel openssl-devel
1
2、下载 Nginx 安装包,当然是要去 Nginx 官网下载,我们下载比较新点的稳定的1.18wget http://nginx.org/download/nginx-1.18.0.tar.gz
1
解压安装包tar -zxvf nginx-1.18.0.tar.gz
1
进入nginx目录cd nginx-1.18.0
1
3、配置 SSL 模块./configure --prefix=/etc/nginx --with-http_ssl_module
1
使用 make 命令编译(使用make install会重新安装nginx)make
make install
1
2
4、配置nginx开机自启动vim /etc/rc.d/rc.local
1
添加以下内容
/etc/nginx/sbin/nginx
在centos7中,/etc/rc.d/rc.local的权限被降低了,所以需要执行如下命令赋予其可执行权限chmod +x /etc/rc.d/rc.local
1
5、配置环境变量
在/etc/profile 中加入:
export NGINX_HOME=/etc/nginx
export PATH=NGINX_HOME/sbin
1
2
保存,
执行 source /etc/profile ,使配置文件生效source /etc/profile
1
6、Nginx.conf 配置
编辑 /etc/nginx/conf/nginx.conf 配置文件:
配置 https server。注释掉之前的 http server 配置,新增 https server:
server {
# 服务器端口使用443,开启ssl, 这里ssl就是上面安装的ssl模块
listen 443 ssl;
# 域名,多个以空格分开
server_name abc.com www.abc.com;
# ssl证书地址
ssl_certificate /etc/nginx/cert/ssl.pem; # pem文件的路径
ssl_certificate_key /etc/nginx/cert/ssl.key; # key文件的路径
# ssl验证相关配置
ssl_session_timeout 5m; #缓存有效期
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全链接可选的加密协议
ssl_prefer_server_ciphers on; #使用服务器端的首选算法
location / {
root html;
index index.html index.htm;
}
}
这里为了方便,在/etc/nginx目录下创建了个cert目录专门存放证书,好了,现在大功告成!