Centos7/8搭建https服务器(SSL域名证书的申请和部署--Apache及Nginx实现HTTPS)

一、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

2、创建CA证书存放目录

mkdir /etc/httpd/ca

3、修改配置文件

vi /etc/httpd/conf.d/ssl.conf

主要的修改有3处,一是监听端口,这里最好使用默认的443
Centos7/8搭建https服务器(SSL域名证书的申请和部署--Apache及Nginx实现HTTPS)_第1张图片
二是网站的根目录
Centos7/8搭建https服务器(SSL域名证书的申请和部署--Apache及Nginx实现HTTPS)_第2张图片

三是证书的位置以及证书名称,可以使用默认,在创建的时候改成相应的名字

Centos7/8搭建https服务器(SSL域名证书的申请和部署--Apache及Nginx实现HTTPS)_第3张图片
4、创建Apache的CA证书
进入存放证书的目录

cd /etc/httpd/ca/

创建自己的CA证书,注意:这里很多人喜欢使用rsa:4096,但在第三方平台上签署时一般都支持2048,所以不是越高越好

openssl req -newkey rsa:2048 -nodes -sha256 -keyout ca.key -x509 -days 1095 -out ca.crt

-days 1095 正好是有效期3年
Centos7/8搭建https服务器(SSL域名证书的申请和部署--Apache及Nginx实现HTTPS)_第4张图片
生成CA证书签名请求

openssl req -newkey rsa:2048 -nodes -sha256 -keyout cert.key -out cert.csr

Centos7/8搭建https服务器(SSL域名证书的申请和部署--Apache及Nginx实现HTTPS)_第5张图片

注意,所有的输入项中尽量使用英文,方便以后使用,同时两个地方的server’s hostname 必须填写你要使用的域名,不然以后想在第三方平台使用的话会提醒域名错误,造成签发不成功

生成注册主机的证书

openssl x509 -req -days 365 -in apache.xyc.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out cert.crt

将证书拷贝到配置文件中路径相对应的目录
//进入证书目录

cd /etc/httpd/ca/

//拷贝证书到默认指定目录

cp cert.crt /etc/pki/tls/certs/
cp cert.key /etc/pki/tls/private/

重启Apache服务,如果启动失败,请检查你的443端口是否被其他软件所占用

systemctl restart httpd

最关键的一步别忘了添加防火墙规则

firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload

5、访问测试(最好使用Firefox浏览器)
访问网页地址https://abc.com/,也就是你部署的网站地址
Centos7/8搭建https服务器(SSL域名证书的申请和部署--Apache及Nginx实现HTTPS)_第6张图片
会提示连接不安全,原因是因为你使用的是自己签名的证书,没有被第三方所认可,但你可以点高级继续访问,到这里基本就算完工了,是不是感觉还不完美,想更好一点,那就继续

四、申请FreeSSL证书

1、打开官网https://freessl.org,选择他们还有一个原因就是这里支持双域名的免费创建,是我认为最爽的一家,而且检测非常快,其他的很多都卡在域名检测这一块
Centos7/8搭建https服务器(SSL域名证书的申请和部署--Apache及Nginx实现HTTPS)_第7张图片
2、填写你要部署的域名,只能使用主域名,其他的通不过,我这里写两个,中间用逗号隔开,然后点“创建免费的SSL证书”
Centos7/8搭建https服务器(SSL域名证书的申请和部署--Apache及Nginx实现HTTPS)_第8张图片
3、填写你的邮件地址,然后证书类型选择RSA,验证选择文件验证,不然你要做域名解析,非常麻烦,在CSR生成这里,你可以使用浏览器生成,也可以使用自己的CSR,还记得刚才用openssl req -newkey rsa:2048 -nodes -sha256 -keyout cert.key -out cert.csr命令创建的CSR吗,直接打开并COPY进来就可以了
Centos7/8搭建https服务器(SSL域名证书的申请和部署--Apache及Nginx实现HTTPS)_第9张图片
4、如果你在创建CSR时没有填写正确的域名,和现在申请的不对应就会报错
Centos7/8搭建https服务器(SSL域名证书的申请和部署--Apache及Nginx实现HTTPS)_第10张图片
5、一切正常就会进入下一步,如果是选择的是浏览器生成会提醒你下载保管
Centos7/8搭建https服务器(SSL域名证书的申请和部署--Apache及Nginx实现HTTPS)_第11张图片
6、进入域名验证环节,请按界面提示操作
Centos7/8搭建https服务器(SSL域名证书的申请和部署--Apache及Nginx实现HTTPS)_第12张图片
7、最后点击“点击验证”按钮,验证通过就会生成证书并提示下载了

将证书填入服务器对应位置,也就是刚才我们设定的 /etc/pki/tls/certs/目录下的cert.crt,将CA证书内容复制进去,然后重启动HTTP

systemctl restart httpd

8、现在再来访问一下看,是不是完全不一样的感觉呢?
Centos7/8搭建https服务器(SSL域名证书的申请和部署--Apache及Nginx实现HTTPS)_第13张图片

五、Nginx下的部署

方法基本差不多,关于证书部分就不作重复了,不过Nginx使用的是pem格式的证书,这个在申请第三方的下载包里有,直接使用就可以了,这里主要是讲部署
1、安装http_ssl_module模块,支持https
查看 nginx 是否安装 http_ssl_module 模块。

nginx -V

如果出现 configure arguments: –with-http_ssl_module, 则已安装(下面的步骤可以跳过,进入 nginx.conf 配置),没有话安装编译工具

yum install gcc pcre-devel zlib-devel openssl-devel

2、下载 Nginx 安装包,当然是要去 Nginx 官网下载,我们下载比较新点的稳定的1.18

wget http://nginx.org/download/nginx-1.18.0.tar.gz

解压安装包

tar -zxvf nginx-1.18.0.tar.gz

进入nginx目录

cd nginx-1.18.0

3、配置 SSL 模块

./configure --prefix=/etc/nginx  --with-http_ssl_module

使用 make 命令编译(使用make install会重新安装nginx)

make
make install

4、配置nginx开机自启动

vim /etc/rc.d/rc.local

添加以下内容
/etc/nginx/sbin/nginx
在centos7中,/etc/rc.d/rc.local的权限被降低了,所以需要执行如下命令赋予其可执行权限

chmod +x /etc/rc.d/rc.local

5、配置环境变量
在/etc/profile 中加入:

export NGINX_HOME=/etc/nginx
export PATH=$PATH:$NGINX_HOME/sbin

保存,
执行 source /etc/profile ,使配置文件生效

source /etc/profile

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目录专门存放证书,好了,现在大功告成!

你可能感兴趣的:(网站建设,Centos操作)