内网环境下nginx使用自签名ssl证书配置https请求

文章详细介绍了如何安装OpenSSL,生成SSL证书和密钥,配置Nginx以支持HTTPS,并处理可能出现的CSS加载问题、CORS跨域问题以及混合内容警告。同时提到了前端设置,如Vue项目的配置调整,以确保安全连接。最后,文章提到访问时可能出现的证书错误及临时解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、安装Openssl

nginx有openssl 命令,没有的自行百度,我配置的nginx是存在的所以没查这部分

二、生成密钥

可以在本地生成然后把文件拷贝到服务器,也可以直接在服务器指定目录生成,我选择的后者。

应该是哪个目录都可以,只要在nginx.conf文件中引入正确地址就可以

我的配置文件目录为 /etc/nginx/nginx.conf,配置文件放在了 /etc/nginx/ssl/文件夹下

1、openssl genrsa -des3 -out *.key 2048

2、openssl req -new -key *.key -out *.csr

3、openssl rsa -in *.key -out *_nopass.key

4、openssl req -new -x509 -days 3650 -key *_nopass.key -out *.crt

(说明:*是你自己起的文件名,第一个文件会提示设个密码,必须是4位,后面会用到这个密码。
第二个文件需要提供一些参数,像国家、省市、公司、域名等,如果不在意的话直接回车不输入。
总共会生成四个文件。)

例如:
1、openssl genrsa -des3 -out serverSSL.key 2048
2、openssl req -new -key serverSSL.key -out serverSSL.csr
3、openssl rsa -in serverSSL.key -out serverSSL_nopass.key
4、openssl req -new -x509 -days 3650 -key serverSSL_nopass.key -out serverSSL.crt

该步骤参考:
作者:jackmanzhang
链接:https://www.jianshu.com/p/3c694b021536

注意:key值有的帖子写1024,这里一定要是2048,我刚开始时写的是1024结果报错,大概意思是key值太低?不太懂,反正重新用2048就好了。

生成文件:

 三、配置nginx

坑一:配置完成后,输入域名可以访问,但是没有css样式,最坑的是谷歌浏览器居然没有任何报错信息,换成火狐浏览器后才看到下图的报错信息

完整 nginx.conf 配置

http{
   server {
        listen 443 ssl;
        server_name 192.168.2.6; #这里也可以用你的域名
        include mime.types;  #解决坑一

        #这两行是必须的,文件就是上一步生成的文件,路径要写对  
        ssl_certificate /etc/nginx/ssl/serverSSL.crt;
        ssl_certificate_key /etc/nginx/ssl/serverSSL_nopass.key;
        
        #下面这5行注释掉也正常,不知道什么作用
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout 5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        error_page   500 502 503 504  /50x.html;

        #访问的项目地址
        location /{
            root  /var/www/html;
            index index.html index.htm;
        }
    }
    server{
          listen 80;
          server_name 192.168.2.6;
          #浏览器地址输入192.168.2.6重定向到https://192.168.2.6
          rewrite ^(.*)$ https://192.168.2.6 permanent; #http转https
    }
}

配置完成后重启nginx:

nginx -s reload

 四、后端接口也要改成https,否则可能会报以下错误

1、Failed to load resource: net::ERR_CONNECTION_REFUSED

2、已拦截跨源请求:同源策略禁止读取位于 http://192.168.2.12:8090/app/getVersion 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。状态码:400。

3、已阻止载入混合活动内容“http://192.168.2.12:8090/app/getVersion

4、Mixed Content: The page at 'https://192.168.2.11:8080/#/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://192.168.2.12:8090/app/getVersion'. This request has been blocked; the content must be served over HTTPS.

后端接口不改好像也可以实现,但是我没有成功,不知道哪里的问题

五、前端设置

index.html 的head中加上

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

vue.config.js 中加上  https:true

六、访问

一切设置好后访问时依旧报错:

GET https://192.168.2.12:8090/app/getVersion net::ERR_CERT_AUTHORITY_INVALID

解决方法:在network中双击报错的接口,出现下图2,点高级-继续前往,然后返回刷新就好了。

目前只知道这样能解决,但是不知道能不能避免第一次访问时的这一种情况 ,后续有解决办法再更新

<think>我们根据用户需求,需要为内网服务生成自签名SSL证书,并配置Nginx使用证书提供HTTPS服务(端口9080)。 步骤分为两部分:生成自签名证书配置Nginx。 第一部分:生成自签名证书 1. 创建证书存放目录(例如:/etc/nginx/ssl) 2. 生成私钥和自签名证书 第二部分:配置Nginx 1. 编辑Nginx配置文件,添加一个server块监听9080端口,并配置SSL证书路径 2. 配置代理转发到目标地址(https://fp.baiwang.com) 注意:自签名证书在浏览器中会显示不安全,需要手动信任(安装到本地受信任的根证书颁发机构)。 详细步骤: 一、生成自签名证书 1. 创建目录(如果不存在): sudo mkdir -p /etc/nginx/ssl 2. 生成私钥(server.key)和证书签名请求(CSR): 通常生成自签名证书可以直接一步生成私钥和证书,但也可以分开。这里我们一步生成: sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/nginx/ssl/server.key \ -out /etc/nginx/ssl/server.crt 参数说明: - req: 创建证书签名请求 - x509: 生成自签名证书 - nodes: 不加密私钥(避免Nginx每次启动都要输入密码) - days 365: 证书有效期365天 - newkey rsa:2048: 生成一个新的2048位的RSA私钥 - keyout: 私钥输出路径 - out: 证书输出路径 执行命令后,会提示输入一些信息,如国家、省份、城市、组织名称、邮箱等。对于内网使用,这些信息可以自定义,但Common Name(域名)要填写内网访问的域名(如:internal.example.com)或IP地址。如果使用IP访问,则填写IP。但注意:浏览器对自签名证书使用IP会有额外警告。 3. 设置文件权限(可选,确保私钥安全): sudo chmod 400 /etc/nginx/ssl/server.key 二、配置Nginx 1. 在Nginx配置文件中(例如:/etc/nginx/nginx.conf 或 /etc/nginx/conf.d/default.conf)添加以下配置: server { listen 9080 ssl; server_name 内网域名或IP; # 例如:192.168.1.100 或 internal.example.com ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; # SSL优化配置 ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers on; location / { proxy_pass https://fp.baiwang.com; # 设置必要的头信息 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 解决目标服务器SSL证书验证问题(如果是自签名或测试环境,可以关闭验证) proxy_ssl_verify off; proxy_ssl_server_name on; } } 2. 测试配置并重载Nginx: sudo nginx -t sudo nginx -s reload 三、客户端信任自签名证书(可选) 由于是自签名证书,浏览器访问时会提示不安全。如果需要让浏览器信任,可以将生成的server.crt证书文件导入到客户端的受信任根证书颁发机构。 对于Windows: - 双击server.crt文件,选择“安装证书”->“本地计算机”->“将所有的证书都放入下列存储”->“受信任的根证书颁发机构” 对于Mac: - 将证书文件拖入“钥匙串访问”应用,然后找到该证书,右键选择“信任”->“始终信任” 注意:内网使用,建议为每个客户端安装此证书。 四、访问测试 使用浏览器访问:https://内网域名或IP:9080 如果配置正确,应该能访问到fp.baiwang.com的内容。 相关问题: 1. 如何为内网多个域名生成自签名证书? 2. Nginx配置HTTPS代理时出现502错误如何排查? 3. 如何让Nginx同时支持HTTP和HTTPS代理? 4. 自签名证书的有效期过后如何更新? 5. 如何配置Nginx以支持客户端证书验证(双向SSL)?</think>### 为 Nginx 内网服务配置自签名 SSL 证书 #### 步骤 1:生成自签名证书 ```bash # 创建证书目录 sudo mkdir -p /etc/nginx/ssl cd /etc/nginx/ssl # 生成私钥和证书(有效期365天) sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout server.key \ -out server.crt # 设置文件权限 sudo chmod 400 server.key ``` 执行命令时需要填写以下信息(示例): ``` Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:Beijing Locality Name (eg, city) [Default City]:Beijing Organization Name (eg, company) [Default Company Ltd]:MyCompany Organizational Unit Name (eg, section) []:IT Common Name (eg, your name or server's hostname) []:internal.example.com # 内网域名或IP Email Address []:admin@example.com ``` #### 步骤 2:Nginx 配置(/etc/nginx/conf.d/internal.conf) ```nginx server { listen 9080 ssl; server_name internal.example.com; # 替换为内网域名或IP # 证书路径配置 ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; # SSL 优化参数 ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers on; # 代理设置 location / { proxy_pass https://fp.baiwang.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; # 目标服务器SSL设置 proxy_ssl_server_name on; proxy_ssl_verify off; # 测试时可关闭验证 } # 错误日志 error_log /var/log/nginx/internal_error.log; access_log /var/log/nginx/internal_access.log; } ``` #### 步骤 3:应用配置 ```bash # 测试配置语法 sudo nginx -t # 重载配置 sudo nginx -s reload ``` #### 步骤 4:客户端信任证书(以 Windows 为例) 1. 将 `server.crt` 复制到客户端 2. 双击证书文件 → 安装证书 → 本地计算机 3. 选择 "将所有证书放入下列存储" → 浏览 → 选择 "受信任的根证书颁发机构" 4. 完成导入 #### 验证方法 ```bash curl -k -v https://internal.example.com:9080 ``` 应看到 `fp.baiwang.com` 的响应内容 ### 关键配置说明 1. **证书参数**: - `-nodes` 参数避免私钥加密(否则 Nginx 每次启动需输密码) - `rsa:2048` 提供足够的安全强度[^1] - 内网域名(Common Name)必须与访问地址一致 2. **SSL 优化**: - `ssl_session_cache` 减少 SSL 握手开销 - `TLSv1.2/1.3` 禁用不安全的老旧协议[^3] - 优先使用 ECDHE 密钥交换算法(前向保密) 3. **代理注意事项**: - `proxy_ssl_server_name on` 传递 SNI 信息[^2] - `X-Forwarded-Proto` 标记原始协议为 HTTPS - 生产环境应启用 `proxy_ssl_verify` 并配置 CA 证书 ### 相关问题 1. 如何为多个内网域名生成 SAN(主题备用名称)证书? 2. Nginx 代理 HTTPS 服务时出现 502 错误如何排查? 3. 如何配置客户端证书验证实现双向 SSL 认证? 4. 自签名证书过期后如何无缝更新不影响服务? 5. 如何通过 Let's Encrypt 为内网服务申请免费证书? > 配置要点:自签名证书中的 `.crt` 文件包含公钥信息,`.key` 是必须保密的私钥文件[^3]。对于内网使用,建议将证书有效期设置为 5-10 年(`-days 3650`),并通过组策略将证书批量部署到所有客户端。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值