nginx搭建一个https服务
【设计要求】
- 证书为自签发
- 有效期5年
- 证书导入本地后,浏览器访问不报警
前言
为什么要用Https协议
我们都知道Http协议是通过铭文传输的,这样对于用户来说是非常不安全的,因为传输的数据可能会含有敏感信息,如果这些数据被攻击者截获,那么可以毫不费力地查看到用于的敏感信息,对用户造成损失。http是基于tcp的,而https 就相当于http + ssl。
现在全球有非常多的公司使用了https协议,因为安全是非常重要的。
Https工作流程
1、TCP 三次同步握手建立连接
2、客户端验证服务器数字证书
3、DH 算法协商对称加密算法的密钥、hash 算法的密钥
4、SSL 安全加密隧道协商完成
5、网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改。
一、yum 安装nginx
1、添加Nginx到YUM源
[root@localhost ~]# sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
2、安装Nginx
[root@localhost ~]# yum install -y nginx
3、启动Nginx、并开机启动
[root@localhost conf.d]# systemctl start nginx.service
[root@localhost ~]# systemctl enable nginx.service
如果一切进展顺利的话,现在可以通过域名或IP来访问Web页面来预览一下Nginx的默认页面;
4、解决无法启动问题
启动时如果遇到无法启动情况,像我遇到的情况:
[root@localhost ~]# systemctl start nginx.service
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.
我按照问题提示命令查看了一下
[root@localhost ~]# journalctl -xe
从输出的提示信息上可以看到”0.0.0.0:80 failed”字样,大概可能跟端口有关,然后再使用如下命令查看一下端口进程:
通过监听端口,发现80端口已经被占用了,怪不得Nginx服务起不来,因为httpd和Nginx默认的监听端口一样。
此时有两种解决方法:
- 方法1:停止httpd服务
# systemctl stop httpd
- 方法2:修改nginx服务的默认监听端口
[root@localhost ~]# vim /etc/nginx/conf.d/default.conf
我这里将他修改为443
再次启动nginx应该就没问题了
二、创建自签发证书
1、安装openssl和openssl-devel
[root@localhost ~]# yum install openssl
[root@localhost ~]# yum install openssl-devel
2、创建私钥文件 server.key
在哪个目录无所谓,也可自定义
[root@localhost ~]# /etc/nginx/conf.d
[root@localhost conf.d]# openssl genrsa 2048 >server.key
//创建私钥信息,并指定私钥的长度为2048,并将生成的私钥信息保存在一个文件中
[root@localhost conf.d]# chmod 600 server.key
//临时修改umask,使之创建的私钥文件权限为600
配置SSL安全证书重启避免输入密码:openssl rsa -in server.key -out server.key.org
3、生成证书请求文件 server.csr
[root@localhost conf.d]# openssl req -new -key server.key -out server.csr
4、生成证书文件 server.crt
[root@localhost conf.d]# openssl x509 -req -days 1825 -in server.csr -signkey server.key -out server.crt
-days 1825 代表有效期 5 年
req <- 用于请求创建一个证书文件
new <- 表示创建的是新的证书
x509 <- 表示定义证书的格式为标准格式
key <- 表示调用的私钥文件信息
out <- 表示输出证书文件信息
days <- 表示证书的有效期
到这里基本结束了,几个文件都已经齐全
三、配置网站服务,加载私钥和证书信息
1、nginx此部分配置
[root@localhost conf.d]# vim default.conf
server {
listen 443;
server_name 192.168.191.130;
ssl on;
ssl_certificate /etc/nginx/conf.d/server.crt;
ssl_certificate_key /etc/nginx/conf.d/server.key;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
然后重启nginx就可以了。
2、但是此时访问会报警 访问时点击 高级 -> 继续 就可以访问到欢迎页面
3、导入到本地,访问不会报警
将之前生成的server.crt文件导入到系统的证书管理器就行了,具体方法:
控制面板 -> Internet选项 -> 内容 -> 发行者 -> 受信任的根证书颁发机构 -> 导入 ->选择server.crt
添加之后就不会警报了。