OpenSSL创建的自签名证书在chrome端无法信任

本文解决在ArcGIS Enterprise环境中使用自签名证书时,Chrome浏览器显示证书无效的问题。通过修改openssl配置文件,添加SubjectAlternativeNames参数,确保证书兼容性,并提供Tomcat8.5的证书配置示例。

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

问题描述

ArcGIS Enterprise环境下往往需要创建自签名证书。小编之前提供的利用OpenSSL创建自签名证书的方法在chrome上再次遇到了证书无效的错误:
证书无效

原因概述

Chrome浏览器要求证书中必须包含“Subject Alternative Names”这一参数。

解决方案

修改待用的openssl配置文件

1 拷贝openssl配置文件以备修改

cp /etc/pki/tls/openssl.cnf /home/tomcat8/ssl/ 

2 修改这一openssl.cnf文件
(1) 找到[ req ] 段落,添加如下配置:

 req_extentions = v3_req

修改req

(2) 添加v3_req配置信息

[ v3_req ]
# Extensions to add to a certificate request
# basicConstraints = CA:FALSE
# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

(3) 添加alt_names配置信息

[ alt_names ]
DNS.1 = linux111.esrichina.com

注:这里填入的即为Subject Alternative Names的域名名称

创建证书

1 创建crt格式的自签名证书

openssl req -sha256 -newkey rsa:2048 -nodes -keyout  agsenterprise.key -x509 -days 3650 -out  agsenterprise.crt -config /home/tomcat8/ssl/openssl.cnf -extensions v3_req

创建crt格式的自签名证书

2 转换为pfx格式的自签名证书

openssl pkcs12 -inkey  agsenterprise.key -in  agsenterprise.crt -export -out  agsenterprise.pfx

对tomcat配置证书(适用于Tomcat 8.5)

 <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="/home/tomcat8/ssl/agsenterprise.pfx"
                         certificateKeystoreType="PKCS12" certificateKeystorePassword="xxxxxx" />
        </SSLHostConfig>
 </Connector>

对tomcat配置自签名证书

参考:
https://blog.zencoffee.org/2013/04/creating-and-signing-an-ssl-cert-with-alternative-names/

<think>嗯,用户想了解如何使用OpenSSL进行签名或者解决相关的签名问题。首先,我需要回顾一下OpenSSL的基本签名流程。用户可能想生成自签名证书,或者遇到了常见的错误,比如自签名证书不被信任,或者证书链不完整。 根据引用[4],生成自签名证书需要先创建私钥,然后生成CSR,最后用CA证书签名。可能用户需要详细的步骤说明。比如,第一步生成私钥,使用openssl genrsa命令,然后创建CSR,这里可能需要配置文件,特别是如果用户需要指定Subject Alternative Name(SAN),比如引用[3]提到的DNS或IP地址。如果用户没有正确配置SAN,可能会导致证书在浏览器中出现错误。 另外,用户提到的错误,比如error 18自签名证书,这可能是因为没有正确安装CA证书到受信任的根证书库中。根据引用[1]和[4],需要将CA证书导入系统或浏览器的信任库。例如,在Windows中,可以通过证书管理器来安装,而在Linux可能需要更新ca-certificates包。 还有,用户可能在使用自签名证书配置HTTPS服务器时遇到问题,比如Nginx配置不正确。引用[1]中提到了Nginx配置HTTPS的示例,需要指定ssl_certificate和ssl_certificate_key的路径。如果路径错误或权限问题,Nginx可能无法加载证书,导致服务启动失败。 此外,引用[2]提到证书格式转换的问题。用户可能需要将PEM格式转换为PFX,以便在Windows或其他系统中使用。这时候需要使用openssl pkcs12命令,同时要确保输入正确的私钥和证书文件。 关于错误解决,常见的错误如“self signed certificate”通常是因为客户信任自签名的CA。解决办法就是安装CA证书到信任库。而“certificate has expired”则是因为证书过期,需要重新生成,并注意设置合理的有效期,如引用[4]中使用-days参数。 用户可能需要具体的命令行示例,比如生成CA证书、服务器证书,以及处理CSR的步骤。需要确保命令中的参数正确,比如-subj选项用于非交互式生成,或者使用配置文件指定扩展项。 还要考虑不同操作系统和浏览器的差异,比如Chrome对SAN的要求严格,必须包含域名或IP,否则会拒绝证书。这时候需要确保在生成CSR时包含SAN扩展,如引用[3]中的openssl.cnf配置文件。 总结一下,用户的真实需求可能是如何正确生成自签名证书,配置到服务器(如Nginx),并解决浏览器中的信任问题。需要分步骤说明生成CA、服务器证书、配置SAN、转换格式,以及安装CA证书的步骤。同时,针对常见错误提供解决方案,比如检查证书链、有效期、SAN配置等。</think>### OpenSSL 签名操作指南及常见问题解决 #### 一、OpenSSL 签名核心操作 1. **生成自签名 CA 证书** ```bash # 生成 CA 私钥(RSA 2048位) openssl genrsa -out ca.key 2048 # 生成自签名 CA 证书(有效期10年) openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt -subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/CN=MyRootCA" ``` > 提示:`-subj` 参数用于非交互式填写证书信息[^4]。 2. **生成服务器证书** ```bash # 生成服务器私钥 openssl genrsa -out server.key 2048 # 创建 CSR(证书签名请求) openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Beijing/O=MyOrg/CN=example.com" # 使用 CA 签名 openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256 -extfile openssl.cnf ``` > 注:`openssl.cnf` 需包含 SAN 扩展(解决 Chrome 浏览器要求): ```ini [ req_ext ] subjectAltName = @alt_names [ alt_names ] DNS.1 = example.com IP.1 = 192.168.1.100 ```[^3] 3. **证书格式转换** ```bash # PEM 转 PKCS#12(用于 IIS 或客户openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt -certfile ca.crt ``` #### 二、典型错误解决方案 1. **错误:`self signed certificate`** - **原因**:客户信任自签名 CA - **解决**: - Windows:双击 `ca.crt` → 安装证书 → 选择“受信任的根证书颁发机构” - Linux:复制到 `/usr/local/share/ca-certificates/` 后执行 `update-ca-certificates`[^1] 2. **错误:`certificate has expired`** - **检查有效期**: ```bash openssl x509 -in server.crt -noout -dates ``` - **重新生成**:调整 `-days` 参数值(如 `-days 3650`) 3. **错误:`unable to get local issuer certificate`** - **原因**:证书链不完整 - **修复**:合并证书链 ```bash cat server.crt ca.crt > fullchain.crt ``` - Nginx 配置修正: ```nginx ssl_certificate /path/to/fullchain.crt; ssl_certificate_key /path/to/server.key; ```[^1] #### 三、进阶应用示例 **创建支持多域名证书** ```ini # openssl.cnf 中扩展 SAN [ alt_names ] DNS.1 = example.com DNS.2 = www.example.com IP.1 = 192.168.1.100 ``` 生成时需指定 `-extensions req_ext` 参数[^3]。 ***
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值