一、介绍
- nginx配置ssl证书,实现https访问,可以使用自签名SSL证书或者购买机构颁发的证书两种方式
- 参考链接
二、创建证书
- TLS/SSL通过公共证书和密钥的相互结合来运行。SSL密钥在服务器上保密。它用于加密发送给客户端的内容。SSL证书与任何请求获得内容的人共享。它可用于解密由关联的SSL密钥签名的内容
1、OpenSSL创建自签名密钥和证书
-
使用这种方式各种请求会提示不安全,会拦截该请求
- 使用浏览器访问时提示不安全,需要用户手动确认,才能继续访问
- 使用postman测试接口时需要关闭ssl 证书验证
-
命令
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
- openssl
- 这是用于创建和管理OpenSSL证书、密钥和其他文件的基本命令工具
- req
- 此子命令指定我们要使用X.509证书签名请求管理。“X.509”是SSL和TLS为其密钥和证书管理所遵循的公钥基础结构标准。我们想要创建一个新的X.509证书,所以我们使用这个子命令
- -x509
- 这通过告诉实用程序我们要创建自签名证书而不是生成证书签名请求来进一步修改上一个子命令
- -nodes
- 这告诉OpenSSL跳过用密码保护我们的证书的选项。当服务器启动时,需要Nginx能够在没有用户干预的情况下读取文件。密码短语会阻止这种情况发生,因为我们必须在每次重启后输入密码
- -days 365
- 此选项设置证书的有效时间长度,单位:天
- -newkey rsa:2048
- 这指定我们要同时生成新证书和新密钥。我们没有创建在上一步中签署证书所需的密钥,因此我们需要将其与证书一起创建。该rsa:2048部分告诉它制作一个2048位长的RSA密钥
- keyout
- 生成的密钥文件的位置
- out
- 生成的证书文件位置
- openssl
-
执行命令过后接着输入一些信息
//国家 Country Name (2 letter code) [XX]:CN //省 State or Province Name (full name) []:bj //城市 Locality Name (eg, city) [Default City]:bj //组织 Organization Name (eg, company) [Default Company Ltd]:gs //组织单位 Organizational Unit Name (eg, section) []:gs //输入与服务器关联的域名,或者是您服务器的公共IP地址 Common Name (eg, your name or your server's hostname) []:127.0.0.1 //邮箱 Email Address []:123@qq.com
-
若提示Can’t open /etc/ssl/private for writing, No such file or directory
- 意思是没有/etc/ssl/private文件夹,自己手动创建即可
-
创建一个完整的Diffie-Hellman组,用于与客户协商完整的保密
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
三、nginx配置
- https默认port是443,如果配置的port是443,访问时不用添加port
- 在需要配置ssl的虚拟主机server块中修改
- 直接复制nginx.conf中的ssl server模块,修改以下部分
server { #端口后面添加ssl listen 8091 ssl; #修改ssl证书文件路径 ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; #修改ssl密钥文件路径 ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; #添加该行,将http请求自动重定向到https error_page 497 301 https://$http_host$request_uri;
四、开放端口
- 改完记得防火墙放开配置的端口