当前位置: 首页 > news >正文

解决自签名证书HTTPS告警:强制使用SHA-256算法生成证书

解决自签名证书HTTPS告警:强制使用SHA-256算法生成证书

一、问题场景

在使用OpenSSL生成和配置自签名证书时,常遇到以下现象:

  • 浏览器已正确导入根证书(.pem文件),但访问HTTPS站点时仍提示不安全连接证书不可信告警。
  • 经排查,操作步骤无误,但证书默认使用SHA-1哈希算法,而现代浏览器(如Chrome、Firefox)已逐步淘汰对SHA-1的支持,导致验证失败。

二、核心解决方案

强制使用SHA-256哈希算法生成证书,替换默认的SHA-1算法。具体操作如下:
在生成用户证书请求(CSR)私钥用户证书的命令中添加 -sha256 选项,确保证书链全流程使用SHA-256算法。

三、完整操作步骤与脚本

3.1 环境变量配置

CERT_CONFIG_PATH=/opt/secure    # 证书配置文件路径
OUTPUT_CERT_PATH=/opt/cert/https # 证书输出路径

3.2 生成自签名根证书(仅需执行一次)

# 说明:生成根证书(CA证书),指定SHA-256算法(隐含在req命令中)
# 参数说明:
# - CN="xyzcom":证书通用名称(可自定义)
# - yourpassword:根证书加密口令
# - -rand /dev/urandom:指定随机数生成器(可选)
openssl req -config ca.cnf -x509 -keyout ${OUTPUT_CERT_PATH}/rootkey.pem -out ${OUTPUT_CERT_PATH}/root.pem \-newkey rsa:2048 -days 36500 -passout pass:yourpassword -rand /dev/urandom
  • 生成文件:
    • root.pem:根证书公钥(需导入浏览器信任列表)
    • rootkey.pem:根证书私钥(用于签发用户证书,需安全存储)

3.3 生成用户证书(含SHA-256关键参数)

3.3.1 清理旧证书(避免冲突)
rm -vf ${OUTPUT_CERT_PATH}/user.key ${OUTPUT_CERT_PATH}/user.csr ${OUTPUT_CERT_PATH}/keystore.p12
cd ${OUTPUT_CERT_PATH}
3.3.2 生成用户私钥和证书请求(含 -sha256
openssl req -new -nodes -keyout ${OUTPUT_CERT_PATH}/user.key -out ${OUTPUT_CERT_PATH}/user.csr \-config ${CERT_CONFIG_PATH}/ca.cnf -sha256  # 关键:指定SHA-256算法
  • -nodes:私钥不加密(如需加密可移除该参数)
  • -config ca.cnf:使用自定义配置文件(见下文)
3.3.3 用根证书签名用户证书(含 -sha256
openssl x509 -req -in ${OUTPUT_CERT_PATH}/user.csr -CA ${CERT_CONFIG_PATH}/root.pem -CAkey ${CERT_CONFIG_PATH}/rootkey.pem \-CAcreateserial -out ${OUTPUT_CERT_PATH}/user.crt -days 36500 -extfile ${CERT_CONFIG_PATH}/extension.cnf \-passin pass:yourpassword -sha256  # 关键:指定SHA-256算法
  • -passin pass:yourpassword:根证书私钥口令(与生成根证书时一致)
3.3.4 生成PKCS12格式证书(用于Tomcat等服务器)
openssl pkcs12 -export -in ${OUTPUT_CERT_PATH}/user.crt -inkey ${OUTPUT_CERT_PATH}/user.key \-out ${OUTPUT_CERT_PATH}/keystore.p12 -name tomcat -passout pass:X10086
  • -passout pass:X10086:PKCS12文件加密口令

四、配置文件详解(ca.cnf)

HOME                    = .
RANDFILE                = $ENV::HOME/.rnd
SN                      = "Not Defined"
CN                      = "zdycom"  # 根证书默认通用名称
default_ca              = ca[ req ]
default_bits            = 2048       # 密钥长度
default_keyfile         = privkey.pem
prompt                  = no         # 禁止交互式提问
distinguished_name      = req_distinguished_name
x509_extensions         = usr_cert   # 用户证书扩展配置
string_mask             = utf8only   # 字符集限制[ req_distinguished_name ]
countryName             = CN         # 国家代码
stateOrProvinceName     = Shanghai   # 省/市
localityName            = Shanghai   # 地区
organizationName        = bk         # 组织名称
organizationalUnitName  = spiderx    # 部门名称
commonName              = $ENV::CN   # 动态获取通用名称(需与证书域名一致)
serialNumber            = $ENV::SN   # 证书序列号[ usr_cert ]
basicConstraints        = critical, CA:FALSE  # 标识非CA证书
keyUsage                = critical, nonRepudiation, digitalSignature, keyEncipherment
nsComment               = "spiderx Generated Certificate"
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid[ v3_ca ]
# 根证书扩展配置(生成根证书时使用)
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid:always
basicConstraints        = critical, CA:true
keyUsage                = critical, cRLSign, keyCertSign[ca]
database                = index.txt  # 证书索引数据库
crlnumber               = crlnum.txt # 吊销列表编号

五、注意事项

  1. 根证书更新
    若更换根证书(rootkey.pem/root.pem),需重新生成所有用户证书(user.crt),否则旧证书将无法通过新根证书验证。
  2. 浏览器导入
    • 根证书(root.pem)需导入系统或浏览器的受信任的根证书颁发机构列表。
    • 不同浏览器路径不同(如Chrome:设置 → 隐私和安全 → 安全 → 证书 → 受信任的根证书颁发机构)。
  3. 算法兼容性
    部分旧系统可能不支持SHA-256,需根据环境调整(但强烈建议优先使用SHA-256)。

六、总结

通过在OpenSSL命令中显式添加 -sha256 选项,可确保自签名证书使用现代加密算法,解决浏览器因SHA-1弃用导致的HTTPS告警问题。关键在于全流程强制使用SHA-256,并正确配置证书链信任关系。该方案已在实际项目中验证有效,可快速应用于各类需要自签名证书的场景(如本地开发、测试环境)。

相关文章:

  • 微软CTO:AI已经“能力过剩”,行业需要努力缩小模型能力与实际产品交付之间的差距
  • AUTOSAR AP 入门0:AUTOSAR_EXP_PlatformDesign.pdf
  • ACM知识点总结 -【搜索技术】
  • 【机器学习】欠拟合、过拟合和正则化
  • 高性能图表库SciChart WPF v8.8全新发布——提升渐变颜色映射高度
  • 力扣-长度最小的子数组
  • Linux操作系统:fork+exec进程创建
  • 如果教材这样讲--碳膜电阻、金属氧化膜电阻、金属膜电阻、保险丝电阻、绕线电阻的区别和用途
  • Docker 与微服务架构:从单体应用到容器化微服务的迁移实践
  • 微软全新开源的Agentic Web网络项目:NLWeb,到底是什么 ?
  • 2024-2025年AI领域重大事件深度解析:技术革命、产业重构与未来挑战
  • 机器学习与深度学习算法:从决策树到 GAN 的原理与 PyTorch 实现
  • 升级node@22后运行npm install报错 distutils not found
  • leetcode 83和84 Remove Duplicates from Sorted List 和leetcode 1836
  • 微服务的应用案例
  • JMeter-Websocket接口自动化
  • C++23中std::span和std::basic_string_view可平凡复制提案解析
  • SpringBoot的前世今生
  • 学习STC51单片机11(芯片为STC89C52RC)
  • 使用VLOOKUP查询两个表格,使用数字格式进行查询,如果返回NA错误,则使用文本格式进行查询
  • 封装系统如何做自己的网站/爱站查询
  • 企业网站做百度小程序/友情链接价格
  • 提供信息门户网站建设/sem外包
  • dw代码做网站/百度seo详解
  • 天津红桥网站建设/网站seo技术能不能赚钱
  • 长沙搜索排名优化公司/seo营销优化软件