内网使用openssl自签名证书开启https连接,同时解决chrome浏览器中的不安全访问

本文详细介绍如何通过OpenSSL生成自签名SSL证书,并在Nginx服务器中进行配置以实现HTTPS加密访问。此外,还提供了如何解决浏览器信任问题的具体步骤。

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

1、在内网中开启https访问,使用ip,请直接看第二步。如果是外网域名的话,建议直接去从 阿里云或者其他的网站中直接用权威机构颁发的证书。地址

2、请先安装OpenSSL 

3、生成证书

创建根证书
新建anxinCA.cnf文件并输入以下内容:

[ req ]
distinguished_name  = req_distinguished_name
x509_extensions     = root_ca

[ req_distinguished_name ]

# 以下内容可随意填写
countryName             = CN (2 letter code)
countryName_min         = 2
countryName_max         = 2
stateOrProvinceName     = beijing
localityName            = beijing
0.organizationName      = anxin
organizationalUnitName  = technology 
commonName              = anxin
commonName_max          = 64
emailAddress            = concat@anxin.com 
emailAddress_max        = 64

[ root_ca ]
basicConstraints            = critical, CA:true

4、在创建一个文件  anxinServerCA.ext     建议先创建anxinServerCA.txt,修改完毕后再把后缀改为  ext

subjectAltName = @anxin
extendedKeyUsage = serverAuth

[anxin]

# 域名,如有多个用DNS.2,DNS.3…来增加
DNS.1 = 
# IP地址
IP.1 = 192.168.137.1

文件介绍
anxinCA.cnf文件是为申请CA根证书的配置文件;
anxinServerCA.ext是生成服务器证书的扩展配置文件;

打开,cmd中执行 如下命令  注意下面命令中的  anxin CA可以改为自己的信息,然后   /CN=192.168.137.1  也要改为自己要对应的ip

openssl req -x509 -newkey rsa:2048 -out anxinCA.cer -outform PEM -keyout anxinCA.pvk -days 10000 -verbose -config anxinCA.cnf -nodes -sha256 -subj "/CN=anxin CA"

openssl req -newkey rsa:2048 -keyout anxinServerCA.pvk -out anxinServerCA.req -subj /CN=192.168.137.1 -sha256 -nodes
openssl x509 -req -CA anxinCA.cer -CAkey anxinCA.pvk -in anxinServerCA.req -out anxinServerCA.cer -days 10000 -extfile anxinServerCA.ext -sha256 -set_serial 0x1111

6、执行完毕后会生成相应的文件。

7、在nginx中配置https加密文件。 以nginx.conf中修改为例,建议在conf同级别,新建一个文件夹 ssl  ,然后把anxinServerCA.pvk     和anxinServerCA.cer   复制过去,我改名为  cert.pvk  ,cert.cer  (可以不修改)

 server {

    listen 443 default ssl;  #监听443端口

    server_name    www.test000001.com;

    ssl_certificate     /etc/nginx/ssl/cert.cer;

    ssl_certificate_key /etc/nginx/ssl/cert.pvk;

    ssl_session_cache    shared:SSL:1m;

    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;

    ssl_prefer_server_ciphers  on;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    location / {

        root /test_code;

        index index.html;

    }

}

8、此时配置完成之后,打开chrome浏览器访问的时候,会提示不安全。然后  安装客户端证书。 安装步骤如下。

  1)双击 anxinCA.cer 文件    --安装证书 -- 选择本地计算机   - 将所有有证书都放入下列存储   -点击浏览  -  受信任的根证书颁发机构

 

点击确定 ,然后下一步,会提示导入完成。 此时关闭浏览器重新打开,然后左上角的变为了 安全连接,即可。

注意,如果此时还是不安全, 记得一定要重启电脑然后在打开浏览器访问后尝试,如果还不行,在尝试第9步

 

9、此时若还不安全,错误代码:NET::ERR_CERT_AUTHORITY_INVALID

 

 

10、解决办法 。在chrome的地址栏里输入 chrome://net-internals/#hsts    ,把192.168.137.1   从HSTS中删除,如下图: 然后重启浏览器
                  原因在于,chrome浏览器新加入了HSTS策略(见上图红色圈)。使用HSTS策略是chrome加入的新特性,使用该策略的网站,会强制浏览器使用HTTPS协议与该网站通信

删除证书 

【Win+R】—> certmgr.msc —> 操作 —>查找证书 —> 右键删除

参考连接  https://stackoverflow.com/questions/43929436/subject-alternative-name-missing-err-ssl-version-or-cipher-mismatch

 

 

 

<think>好的,用户问为什么用IP访问HTTPS网站会提示安全,即使有证书。我需要分步骤分析原因。首先,HTTPS依赖SSL/TLS证书,证书通常绑定域名而是IP。证书颁发机构(CA)在签发证书时,通常验证域名的所有权,而会验证IP地址。因此,即使服务器配置了证书,如果证书的主题或主题备用名称(SAN)中没有包含IP地址,浏览器就会认为证书无效,导致安全提示。 其次,用户可能误解了“有证书”的情况。可能服务器确实有证书,但该证书是为域名颁发的,而是IP地址。或者用户可能使用的是自签名证书,但自签证书浏览器信任,同样会引发警告。 接下来,需要考虑技术细节。根据RFC 2818,当通过IP地址访问HTTPS时,浏览器会检查证书的SAN中是否有IP地址条目。如果没有,即使证书是有效的,也会触发错误。此外,公共CA通常会为IP地址签发证书,除非是扩展验证(EV)证书,但这很少见且成本高。 另外,服务器配置也可能影响结果。比如,如果服务器配置了SNI(服务器名称指示),但客户端用IP访问时无法提供正确的SNI信息,可能导致服务器返回默认证书,而这个证书可能匹配IP地址,从而引发问题。 用户可能遇到的具体场景包括:在内网使用IP访问服务,但证书是给域名的;或者测试环境使用自签证书,未添加到信任库。解决方案可能有:使用域名访问,申请包含IP的证书(如自签或私有CA),或调整浏览器信任设置。 需要提醒用户注意,公共网站建议使用IP+HTTPS,因为证书问题难以解决,且影响用户体验。内部环境可以通过自签证书并手动信任来处理。</think>\#\#\# 一、问题核心 **根本原因**:HTTPS证书的绑定对象是域名(Subject Alternative Name, SAN),而是IP地址。即使服务器配置了证书,用IP直接访问HTTPS仍会触发证书验证失败,导致浏览器提示安全。 --- \#\#\# 二、详细分析 #### 1. **证书验证规则** - **证书匹配逻辑**:浏览器会检查以下内容: $$ \text{证书有效} \quad \text{AND} \quad \left( \text{域名或IP在证书SAN中} \quad \text{OR} \quad \text{证书为通配符匹配} \right) $$ **关键限制**:公共CA(如Let's Encrypt)签发的证书通常**支持直接绑定IP地址**(除非特定场景,如企业级EV证书)。 #### 2. **IP访问HTTPS的两种场景** | 场景 | 证书类型 | 浏览器表现 | |------|----------|------------| | 证书绑定域名 | 域名证书(如 `example.com`) | 提示“证书匹配” | | 证书绑定IP | IP证书(如 `192.168.1.1`) | 需满足以下条件:<br>- 证书由受信任的CA签发<br>- IP在证书SAN中 | #### 3. **技术限制(RFC标准)** - **RFC 2818**规定:HTTPS服务必须通过域名验证,除非证书明确包含IP地址作为SAN。 - **浏览器行为**:若用IP访问且证书未包含该IP,会触发 `NET::ERR_CERT_COMMON_NAME_INVALID` 错误。 --- \#\#\# 三、解决方案 #### 1. **常规场景(推荐)** - **使用域名访问**:为服务器配置域名(如 `example.com`),并申请该域名的证书。 - **DNS解析**:通过本地Hosts文件或DNS服务器将域名指向目标IP(内网/测试环境常用)。 #### 2. **必须用IP访问的特殊场景** - **自签名证书**(仅限内网或测试环境): ```bash # 生成自签名证书(包含IP地址) openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \ -keyout server.key -out server.crt \ -subj "/CN=192.168.10.110" -addext "subjectAltName=IP:192.168.10.110" ``` **注意**:需手动将证书导入客户端信任库。 - **私有CA签发**(企业内网): 搭建私有CA,签发包含IP地址的证书,并分发CA根证书到客户端设备。 #### 3. **绕过警告(非推荐)** - 浏览器中手动添加例外(访问 `chrome://flags/#allow-insecure-localhost` 可启用本地IP例外)。 - 客户端代码禁用证书验证(仅限开发测试,如 `curl -k`)。 --- \#\#\# 四、典型错误示例 #### 1. **证书未包含IP** - **错误信息**: ``` 此服务器无法证明它是 192.168.10.110 安全证书仅适用于 example.com ``` - **原因**:证书SAN中仅有 `example.com`,无IP地址条目。 #### 2. **自签名证书未受信任** - **错误信息**: ``` 此连接非私密连接 NET::ERR_CERT_AUTHORITY_INVALID ``` - **解决方案**:手动导出服务器证书并安装到客户端。 --- \#\#\# 五、附加建议 - **生产环境避免使用IP+HTTPS**:证书兼容性差且用户体验佳。 - **容器/K8s等场景**:可通过Ingress绑定域名,避免直接暴露IP。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值