基于 Nginx 配置ssl证书实现https
一、加密方式
1、对称加密
所谓对称加密即:客户端使用一串固定的秘钥对传输内容进行加密,服务端使用相同的秘钥进行解密。
2、非对称加密
SSL证书(遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。是公钥+私钥一对秘钥串)
非对称加密即客户端使用公钥对传输内容进行加密,服务端使用私钥对传输内容进行解密
二、http与https
http是数据在网络上进行明文传输,不安全,但解析效率高(不用加解密);https是加密传输,如果使用对称加密,客户端与服务端秘钥固定,加解密效率不会有很大开销,但存在秘钥泄露风险,不够安全;如果使用非对称加密,客户端使用公钥,服务端使用私钥,加解密算法开销大,性能成本高,效率较对称加密要低,但具有较高的安全性。
实际生产环境中,https是使用了非对称加密与对称加密相结合的方式。首先使用非对称加密将客户端随机生成的对称秘钥发送到服务端(安全传输到服务端),之后客户端和服务端之间的加解密使用对称秘钥。如下图所示
三、Nginx配置https
3.1、配置前提
nginx是否已经启用SSL
模块,启动nginx并执行/usr/local/nginx/sbin/nginx -V
查看,如下:
如果显示带有ssl
配置信息,证明未安装,需要安装OpenSSL。
配置安装OpenSSL
:
yum -y install openssl openssl-devel
3.2、创建SSL自签证书
Nginx配置https只需要两个文件。一个是浏览器证书(内含公钥,供浏览器加密使用),一个是私钥(供服务器解密使用)
server.crt和server.key可以自己去证书颁发机构购买商业证书。也可以自己使用程序自己生成一份。此处自签一份证书。
#创建并进入ssl目录
cd /usr/local/nginx
mkdir ssl
cd ssl/
(1)创建服务器私钥,需要输入一个口令
openssl genrsa -des3 -out server.key 4096
Generating RSA private key, 4096 bit long modulus (2 primes)
...................++++
..................................++++
e is 65537 (0x010001)
Enter pass phrase for server.key: <---- 输入密码,自定义密码,要记住后续要使用
Verifying - Enter pass phrase for server.key: <---- 再输一次确认密码
(2)创建签名请求的证书(CSR)
openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key: <---- 输入前面创建的密码
Country Name (2 letter code) [XX]:CN <---- 输入国家代码两位
State or Province Name (full name) []:Chongqing <---- 输入省份 英文名
Locality Name (eg, city) [Default City]:Chongqing
Organization Name (eg, company) [Default Company Ltd]:IBM <---- 输入公司名
Organizational Unit Name (eg, section) []: <---- 可以不输入
Common Name (eg, your name or your server's hostname) []: <---- 可以不输入
Email Address []:bluetata@ibm.com <---- 输入电子邮箱
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: <---- 可以不输入
An optional company name []: <---- 可以不输入
(3)再加载SSL支持的Nginx并使用上述私钥时除去必须的口令
openssl rsa -in server.key -out server_nopass.key
Enter pass phrase for server.key: <---- 输入前面创建的密码
writing RSA key
(4)最后标记证书使用上述私钥和CSR,生成crt证书文件
openssl x509 -req -days 365 -in server.csr -signkey server_nopass.key -out server.crt
最后生成我们需要的两个证书文件:server.crt
和server_nopass.key
3.3、配置证书
在Nginx中的conf配置文件中的Server模块加入:
ssl_certificate /usr/local/nginx/server.crt;
ssl_certificate_key /usr/local/nginx/server_nopass.key;
3.4、测试验证
- 直接浏览器访问:
https//xx.xx.xx.xx
是否成功访问nginx欢迎页 - F12 在Security中查看是否启用了TLS 1.2
在Security中可以看到using TLS 1.2
证明开启https成功
相关文章
- 一份 Python 日志配置,同时适用于开发和生产环境
- 【Linux】配置动态IP
- 为你的Nginx配置免费SSL证书
- windows apache部署SSL证书让网站支持https的配置方法
- 项目适 Oracle改造及SSL安全性配置问题汇总详解
- nginx配置ssl证书实现https访问详解程序员
- CentOS 7.2 下nginx SSL证书部署的方法(使用crt以及key 配置)详解程序员
- MySQL Variables have_ssl 数据库 参数变量解释及正确配置使用
- MySQL Variables ssl_ca 数据库 参数变量解释及正确配置使用
- 配置Linux下快速删除Nginx配置的技巧(linux删除nginx)
- Nginx网站架构实战——03、nginx虚拟主机配置
- windows配置Apach+PHP+MySQL等环境
- 优化网站性能,实用技能:Redis配置缓存详解(redis配置缓存)
- 如何配置 MySQL SSL,提升数据传输安全性(mysqlssl配置)
- Linux 开启 SSL:安全至上(linux开启ssl)
- Linux ICE 配置:轻松搭建安全连接网络(linuxice配置)
- MySQL中使用SSL出现问题的解决方法(mysql中ssl问题)
- 深入了解MySQL中SSL连接的必要性和配置方法(mysql中 ssl连接)
- 如何在MySQL中关闭SSL连接(mysql中ssl关闭)
- 了解MySQL SSL加密使用方法,保障数据库数据传输安全(mysql_ssl)
- 如何配置MySQL数据库(mysql下载与安装后)
- Redis启用SSL安全传输的步骤(redis 配置ssl)
- ApacheSSL服务器配置SSL详解