内网 IP 自签名 SSL 证书申请:CentOS+Nginx 免费部署方案(测试环境专用)

李洋博客2025-11-283.8K阅读2评论

温馨提示:这篇文章已超过67天没有更新,请注意相关的内容是否还可用!

最近测试服务器安全,了解了内网IP的SSL证书,之前从未关注,只是知道有IP证书这个事,没想到和还有内网IP的SSL证书,经过度娘之后,自己在本地内网环境简单测试了以下,还不错(没有什么意义哈),记录开始首先在 CentOS 系统的 Nginx 服务器上,为内网 IP(192.168.110.100)申请一个免费的 SSL 证书,用于内部测试。

由于公共 CA(证书颁发机构)如 Let's Encrypt 不提供直接面向 IP 地址的免费证书服务,因此我们将采用自签名证书(Self-Signed Certificate)的方案。这种方式完全免费,适合内部测试、开发和局域网环境使用。

自签名证书是由证书使用者自行创建和签名的,浏览器会默认提示“您的连接不是私密连接”,这是正常现象,因为它没有经过受信任的第三方 CA 的验证。你需要在测试客户端的浏览器中手动信任该证书。

安装必要的工具

我们将使用 `openssl` 工具来生成证书和私钥。大多数 CentOS 系统默认已安装,若未安装,请执行以下命令:

sudo yum install -y openssl

生成自签名 SSL 证书和私钥,为了方便管理,我们首先创建一个专门存放证书的目录,例如 `/etc/nginx/ssl`。

sudo mkdir -p /etc/nginx/ssl
cd /etc/nginx/ssl

快速生成(推荐用于测试)

使用以下命令可以快速生成一个有效期为 3650 天(10 年)的证书和私钥。

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout nginx-selfsigned.key -out nginx-selfsigned.crt

执行后,脚本会要求你输入一些信息,如国家、省份、城市等。**对于内网测试,这些信息并不重要,可以随意填写或直接按回车跳过。**

国家名称(2个字母代码)[XX]:

州或省名称(全名)[]:

地点名称(例如,城市)[默认城市]:

组织名称(如公司)[默认有限公司]:

组织单位名称(例如,部门)[]:

通用名称(例如,您的姓名或服务器的主机名)[]:

内网 IP 自签名 SSL 证书申请:CentOS+Nginx 免费部署方案(测试环境专用) 第1张

命令执行完毕后,在 `/etc/nginx/ssl` 目录下会生成两个文件:

- `nginx-selfsigned.key`: 服务器的私钥,必须严格保密。

- `nginx-selfsigned.crt`: 自签名的公钥证书,可以公开。

分步生成(更灵活,适合需要证书链的场景)

这种方法会先生成一个证书请求文件(CSR),然后用私钥对其进行签名。

生成私钥:

sudo openssl genrsa -out nginx-selfsigned.key 2048

生成证书签名请求 (CSR):

sudo openssl req -new -key nginx-selfsigned.key -out nginx-selfsigned.csr

同样,在这一步需要填写信息,**Common Name 依然填写 `192.168.110.100`**。

用私钥给 CSR 签名,生成证书:

sudo openssl x509 -req -days 3650 -in nginx-selfsigned.csr -signkey nginx-selfsigned.key -out nginx-selfsigned.crt

两种方法最终得到的 `nginx-selfsigned.key` 和 `nginx-selfsigned.crt` 文件是等价的,你可以选择任意一种。

配置 Nginx 使用 SSL 证书

现在,我们需要修改 Nginx 的配置文件,使其监听 443 端口并使用我们刚刚生成的证书。

    #SSL-START SSL相关配置

    ssl_certificate    /etc/nginx/ssl/nginx-selfsigned.crt;
    ssl_certificate_key    /etc/nginx/ssl/nginx-selfsigned.key;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+CHACHA20:EEDDH+CHACDA20-draft:EEDDH+AES256:RSA+AES256:EECDDH+AES256:RSA+AES256:EEAFH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_tickets on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=31536000";
    error_page 497  https://$host$request_uri;

    #SSL-END

检查配置文件语法是否正确:

sudo nginx -t

如果显示 `syntax is ok` 和 `test is successful`,则表示配置无误。

步骤四:在客户端浏览器中信任证书

在浏览器中访问:打开你的浏览器(推荐在另一台内网机器上测试),访问 `https://192.168.110.100`。

处理安全警告:此时,浏览器会显示一个“您的连接不是私密连接”或类似的安全警告。这是因为我们的证书是自签名的,未被浏览器信任的根 CA 所认证。

内网 IP 自签名 SSL 证书申请:CentOS+Nginx 免费部署方案(测试环境专用) 第2张

手动信任证书:

-   **Chrome / Edge**: 点击“高级” -> “继续前往 192.168.110.100(不安全)”。

 -   **Firefox**: 点击“高级” -> “添加例外” -> “确认安全例外”。

一旦添加例外,浏览器就会信任这个证书,后续访问就不会再出现警告(直到证书过期)。

内网 IP 自签名 SSL 证书申请:CentOS+Nginx 免费部署方案(测试环境专用) 第3张

将证书导入WINDOWS,下载证书crt格式到本地,然后双击,新弹出的页面选择【安装证书】 ,如图默认选择下一步:

内网 IP 自签名 SSL 证书申请:CentOS+Nginx 免费部署方案(测试环境专用) 第4张

会弹出安全警告,点击【Y】是,即可完成导入,如图:

内网 IP 自签名 SSL 证书申请:CentOS+Nginx 免费部署方案(测试环境专用) 第5张

总结

至此已经成功地在 CentOS 的 Nginx 服务器上为你的内网 IP 配置好了 SSL 证书。虽然这是一个自签名证书,不被公网信任,但它完全满足内部测试和局域网环境的 HTTPS 需求。

不过我测试了,即便是导入的自签证书在浏览器依然是安全风险提示,这个目前不知道怎么解决,按理说证书文件已经导入,变成信任,不应该继续出现安全风险提示了,不理解,有知道问题的大佬希望您不吝指导,告诉小弟怎么操作才能正常显示,先行谢过~~~

文章版权声明:除非注明,否则均为李洋博客原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (有 2 条评论,3772人围观)
网友昵称:花晨月夕
花晨月夕 V 铁粉 Google Chrome 142.0.0.0 Windows 10 x64 沙发
2025-11-30 来自江苏 回复
文章不错,写的很好!
网友昵称:李洋博客
李洋博客 V 博主 Sogou Explorer Windows 10 x64
2025-12-01 来自辽宁 回复
@花晨月夕 没有意义啊~
取消
微信二维码
微信二维码
支付宝二维码