nginx实现https协议请求重写成http教程&&OpenSSL生成ssl证书

实现https协议请求重写成http协议请求

1、nginx添加SSL的支持

需要在配置时添加https_ssl_moule模块,具体安装步骤请移步
nginx实现不停机添加新模块 && make upgrade的使用

2、生成证书

方式一:使用阿里云/腾讯云等第三方服务进行购买。

首先要申请域名备案成功之后,在领取免费的ssl进行签发后下载nginx对应的zip包

在这里插入图片描述

方式二:使用openssl生成证书

学习时,使用openssl生成的单机版证书已经完全可以达到预期的效果,不过真实上线项目,或者是部署微信小程序,就一定需要第三方签发认证的ssl证书

OpenSSL 安装

OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包进行安全通信,并且避免被窃听。

SSL:Secure Sockets Layer安全套接协议的缩写,可以在Internet上提供秘密性传输,其目标是保证两个应用间通信的保密性和可靠性。在Nginx中,如果服务器需要提供安全网页时就需要用到OpenSSL库,所以我们需要对OpenSSL的库文件及它的开发安装包进行一个安装。

可以使用命令yum install -y openssl openssl-devel来进行安装

安装成功后,可以通过rpm -qa openssl openssl-devel来查看是否安装成功

上述命令,一个个来的话比较麻烦,我们也可以通过一条命令来进行安装

yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel进行全部安装。

使用OpenSSl生成证书

先要确认当前系统是否有安装openssl

[root@localhost conf]# openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

按照下面的命令进行生成

mkdir /root/cert
cd /root/cert
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
[root@localhost ~]# mkdir /root/cert
[root@localhost ~]# cd /root/cert
[root@localhost cert]# openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
........................++++++
.++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
[root@localhost cert]# openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:root
string is too long, it needs to be less than  2 bytes long
Country Name (2 letter code) [XX]:zs
State or Province Name (full name) []:zhengshuang
Locality Name (eg, city) [Default City]:gz
Organization Name (eg, company) [Default Company Ltd]:cs
Organizational Unit Name (eg, section) []:cs1
Common Name (eg, your name or your server's hostname) []:zs_host
Email Address []:1372713212@qq.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456
An optional company name []:css

[root@localhost cert]# cp server.key server.key.org
[root@localhost cert]# openssl rsa -in server.key.org -out server.key
Enter pass phrase for server.key.org:
writing RSA key
[root@localhost cert]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=zs/ST=zhengshuang/L=gz/O=cs/OU=cs1/CN=zs_host/emailAddress=1372713212@qq.com

生成结果
[root@localhost cert]# ll
总用量 16
-rw-r--r--. 1 root root 912 61 13:17 server.crt
-rw-r--r--. 1 root root 741 61 13:16 server.csr
-rw-r--r--. 1 root root 887 61 13:17 server.key
-rw-r--r--. 1 root root 963 61 13:17 server.key.org

3、配置代理服务器nginx.conf文件

    # HTTPS server

    server {
        listen       443 ssl;
        # ssl on;  同上边443 ssl是一样的
        # server_name  localhost;  如果是使用第三方签发的ssl,这里需要填写能够ping同的域名
        server_name localhost;

	# openssl生成密钥的绝对路径,如果是第三方签发的,需要上传到服务器中,并填写相对路径
        ssl_certificate      /root/cert/server.crt; 
        ssl_certificate_key  /root/cert/server.key;

        # 设置会话缓存,shared表示所有的工作进程之间共享缓存,SSL缓存名称,1m缓存大小
        ssl_session_cache    shared:SSL:1m;
        # 5m超时时间,单位为minutes
        ssl_session_timeout  5m;

        # 允许的密码格式
        ssl_ciphers  HIGH:!aNULL:!MD5;
        # 服务器密码是否优先于客户端密码,设置为on则优先使用服务器端密码
        ssl_prefer_server_ciphers  on;

        location /server9001{
            # 地址重写
            rewrite ^(.*) http://192.168.137.8:9001$1;
        }
    }

4、配置被代理服务器nginx.conf文件

server{
    listen 9001;
    server_name localhost;
    default_type text/html;
    location /{
        return 200 '<h1>192.168.137.8:9001<h1>';
  }
}

5、测试实现

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mdoQYAkX-1654759493683)(a-nginx.assets/image-20220609151354581.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RfX65biA-1654759493683)(a-nginx.assets/image-20220609151836113.png)]

6、总结

想要实现https协议请求重写成http协议请求的途径有多种,本文采用的使用nginx的反向代理来实现

  • 首选需要让服务器的nginx添加ssl模块支持
  • 生成证书的途径,单机版可以使用OpenSSL工具生成,但是如果是要部署上线的项目一定要采用第三方签发授权的ssl证书,推荐阿里云或者腾讯云,签发前必须注册申请域名且成功备案,才可以根据域名去签发ssl证书
  • 配置代理服务器的时候,不论是OpenSSL生成的ssl证书还是第三方签发的证书,在配置时的区别仅在于server_name的不同,第三方签发的必须使用域名;使用时保证指定的绝对路径的证书是有效的即可
这个错误表明 Nginx 在尝试加载指定路径 `/etc/nginx/ssl/default_cert.pem` 中的 SSL 证书文件时失败了。根据报错信息,问题出在无法找到该文件或目录。以下是几种常见的解决办法及检查步骤: ### 检查与修复 #### 1. 文件是否存在 首先确认目标位置确实存在名为 `default_cert.pem` 的证书文件: ```bash ls -l /etc/nginx/ssl/ ``` 如果文件不在那里,则需要生成新的证书或将现有证书移动到正确的路径下。 #### 2. 权限设置是否正确 确保 Nginx 进程有足够的权限读取此文件及其所在的目录结构。可以使用以下命令查看当前用户对文件夹和文件的访问权限,并相应调整它们: ```bash sudo chown root:root /etc/nginx/ssl/default_cert.pem # 设置所有权给 root 用户组 sudo chmod 600 /etc/nginx/ssl/default_cert.pem # 修改权限为只允许所有者读写 ``` #### 3. 路径拼写无误 再次核对你配置文件里的路径是否有打字错误,尤其是斜杠的方向(Linux 系统中应该用正向斜杠 `/`)。同时留意相对路径和绝对路径的区别。 #### 4. 配置文件语法验证 有时候即使路径是对的也可能因为其他地方配置不当而引发连锁反应。因此可以用下面这条命令来测试 nginx.conf 是否包含语法错误: ```bash nginx -t ``` #### 5. SELinux/AppArmor 影响 如果你的操作系统启用了强制访问控制系统(例如 SELinux 或 AppArmor),那么还需要额外配置这些安全模块以允许 Nginx 访问特定区域内的资源。对于 CentOS/RHEL 系列服务器而言,可以通过临时关闭 SELinux 来排除其干扰作用(仅用于排查目的); 而对于 Ubuntu 发行版则需关注 AppArmor 规则设定。 --- ### 自动生成自签名证书示例 若你需要快速创建一个新的测试用途证书而不是获取正式签发机构认证过的 CA 文件的话,可以考虑利用 OpenSSL 工具来自动生成一对匹配公私钥组合: ```bash mkdir -p /etc/nginx/ssl && cd $_ openssl req -newkey rsa:4096 \ -x509 \ # X.509 v3 格式的数字证书请求格式 -sha256 \ # 使用 SHA-256 哈希算法 -days 365 \ # 设定有效期一年 -nodes \ # 私钥不加密码保护 -out default_cert.pem \ # 输出证书至 current directory 下面命名为 "default_cert.pem" -keyout default_key.pem # 将生成好的私钥保存单独文件 "default_key.pem" ``` 完上述操作后记得重启 Nginx 使新改动生效: ```bash sudo systemctl restart nginx ``` 以上就是针对“cannot load certificate”这一常见 NGINX 错误提示的一些解决方案。希望这些建议能帮助您顺利解决问题! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值