Nginx Https访问配置

Posted 老板请吃饭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx Https访问配置相关的知识,希望对你有一定的参考价值。

目录

背景

一、思考过程

二、具体步骤

第一步:签发SSL证书

第二步:检查Nginx是否安装SSL模块

第三步:安装Nginx SSL模块 

第四步:Nginx配置

第五步:客户端配置

三、总结

四、后续


背景

2017年《中华人民共和国网络安全法》的正式实施,明确了信息系统主体在网络安全中的安全责任问题(简单、但不太严谨的说法:不开展等级保护等于违法),因此在很多项目建设中,尤其是电子政务涉及重要数据的项目,都需要通过第三方的网络安全等级测评(二级/三级)。

在等保测评中,其中一项测评得分项为“采用HTTPS协议”,关于为什么能实现对数据在传输过程中机密性和完整性保护,请自行百度。


一、思考过程

HTTPS的基础是SSL协议,需要签发SSL证书,目前常见的方式有两种:

一是通过可信CA机构来购买SSL证书,这种证书能够被各大浏览器识别,如在各大公有云网站都可购买(根据安全级别几百~几万/每年都有),用于互联网应用;二是自己签发的SSL证书,不被浏览器识别(不同浏览器会提醒不安全,除非用户自己导入证书并设置信任),这种证书一般用在仅包含特定用户的项目或局域网环境内。

本文中针对的就是自签发SSL证书应用,并通过Nginx配置来实现项目的HTTPS路径访问。

二、具体步骤

第一步:签发SSL证书

关于签发SSL证书,有3种方法(推荐使用方法1)

方法1:在线生成工具此网站为宝藏网站,工具箱中有很多实用的工具,建议收藏时常服用。

1)输入证书信息,既然是自签名有效期设置长一些

 当前这个网站签出的证书颁发机构是MYSSL.com并不受浏览器信任。

2)下载证书

下载证书,需要用到的文件是服务端证书cert.pem和私钥private.key,其他的证书链full_chain.pem、根证书myssl_root.cer、ECC中间证书myssl_ecc_middle.cer建议也一并保存。

方法2:用openssl或java keytools

方法3:用java keytools和openssl

参考文章:keytool生成密钥与证书并在nginx配置https(需要使用一小段java代码)

或者参考:利用openssl主要进行格式转化

对于nginx,其实就是要获取到证书(pem、cer、crt)和私钥(key)。

当你了解了几个格式之间的关系,那么你就可以通过命令或者工具获取nginx或者其他web服务软件所需的证书格式。

第二步:检查Nginx是否安装SSL模块

Windows版本Nginx目前都是已经自带SSL模块。

Linux版本默认编译是不带SSL模块的,所以必须重新编译一下,方法如下:

到Nginx安装目录下执行

./nginx -V

如果出现 (configure arguments: --with-http_ssl_module), 则已安装(下面的步骤可以跳过,直接进行

第三步:安装Nginx SSL模块 

解压缩目录:/root/nginx

安装目录:/usr/local/nginx

一般进入到解压缩目录,输入

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

接下来执行

#切记不要执行make install,否则会重新安装nginx
make

上述操作执行完成以后,你的目录下会出现objs文件夹,文件夹内存在nginx文件,如图:

#停止nginx服务
./nginx -s stop 
#替换之前的nginx
cp /root/nginx/objs/nginx /usr/local/nginx/sbin
#注意这里是大写的V,小写的只显示版本号
./nginx -V

如果出现了configure arguments: --with-http_ssl_module 证明已经安装成功。

提示:替换后再执行 -V命令如果提示权限不足,先给这个nginx文件提升权限。

第四步:Nginx配置

Nginx配置很简单,一般默认conf文件中的证书路径修改即可

第五步:客户端配置

如果自签发的域名证书,一般需要配置host文件,才能访问

Windows的host文件路径:

C:\\Windows\\System32\\drivers\\etc

Linux的host文件路径:

/etc/hosts

这样就可以访问路径:https://myssltest.com

至于浏览器提示不安全如何处理,目前已知的方法是导入信任证书来解决,经过研究并不完美,后续再研究。

题外:除了配置host文件,还可以自己搭建DNS服务,则需要配置网络连接中的DNS配置,参考文章: DNS:从零搭建公司内网DNS服务器

三、总结

通过上述步骤完成Nginx配置自签名SSL证书的HTTPS协议访问,我们发现都需要在客户端进行配置工作,无论是导入证书、配置host都是比较专业的操作,那么在系统设计时能够在登录页做好引导是十分必要的。

四、后续

写完之后发现可写的内容还有很多,分批赶制中:

TO DO LIST:

和SSL相关:

1、SSL原理,国密SM2如何结合;

2、各种格式的证书文件之间关系和转换;

3、商业互联网 SSL证书购买,免费和付费之间差异;

其他:

1、Nginx常用配置及命令整理;

2、关于linux使用用户权限和各类软件的权限如何划分。

以上是关于Nginx Https访问配置的主要内容,如果未能解决你的问题,请参考以下文章

阿里云上,Ubuntu下配置Nginx,在tomcat中加了https协议就不可以了

Linux下nginx配置https协议访问的方法

nginx https配置后无法访问,可能防火墙在捣鬼

HTTPS安全配置 | NGINX版 从零开始(IP访问到HTTPS域名访问)

nginx配置ssl证书实现https访问

nginx.conf 忽略了 nginx-ingress 配置映射片段