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

内网环境自签名超长期HTTPS证书,并在Chrome中显示为安全证书

 环境说明:本环境在AD域内(方便使用组策略安装证书),内网环境,Chrome为当前最新版130+,如果没有AD域的,就得想办法给所有电脑安装证书,比如说使用桌管等软件下发Bat。

用到的工具有:Openssl、域组策略

先决条件:

生成证书的终端需已安装OpenSSL,安装过程如下

1 下载 OpenSSL 安装包

https://slproweb.com/products/Win32OpenSSL.html

根据你的系统选择版本: Windows 64 位系统 ➜ 选择 Win64 OpenSSL

Windows 32 位系统 ➜ 选择 Win32 OpenSSL

通常选择: Win64 OpenSSL v3.x Light(较小安装包) 或  Win64 OpenSSL v3.x(完整版)

2 运行安装程序 下载后双击 .exe 安装文件运行。 (安装时提示找不到 Visual C++ redistributables? 官网下载:https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist )

安装路径可以使用默认路径,选“将 OpenSSL 的 bin 目录添加到系统 PATH”选项

3 验证是否安装成功 打开命令行(cmd)或 PowerShell,输入:openssl version

4 安装后提示找不到 openssl 命令

可能是系统没有添加 OpenSSL/bin 到环境变量。

你可以手动设置环境变量: 打开系统环境变量设置: 控制面板 ➜ 系统 ➜ 高级系统设置 ➜ 环境变量 在系统变量中找到 Path,添加安装路径如C:\Program Files\OpenSSL-Win64\bin

确认后重新打开终端即可。

操作步骤:

一、生成自签名证书

1. 进入CMD,找一个或者新建一个目录,用来放置生成的文件

mkdir、cd等,具体命令略。

2. 生成私钥

openssl genrsa -out server.key 2048

3. 生成请求文件

openssl req -new -key server.key -out server.csr -sha256

4. 在当前目录创建一个san.cnf文本文件,写入下列内容,其中三个www.test.com,要替换为你要签名的完整域名,此步骤不可省略,若省略,Chrome会报告缺少SAN字段,证书不安全。

[req]distinguished_name=req_distinguished_namereq_extensions=req_extprompt=no[req_distinguished_name]CN=www.test.com[req_ext]subjectAltName=DNS:www.test.com,DNS:www.test.com

CMD执行命令,其中7300是有效期天数,即20年,chrome要求使用安全等级高一些的哈希算法,所以签名参数用的sha256,如果不指定默认使用sha1,对于sha1,Chrome会报不安全。

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout server.key -out server.crt -config san.cnf -extensions req_ext -sha256

5. 验证证书是否正确

openssl x509 -in server.crt -noout -text

到这一步就已经有了公钥、私钥文件了,可以正常使用了。

6. (附)生成PFX证书交换文件

PFX 是微软和很多企业系统(比如 IIS、Windows AD、Azure、Java keystore)用来部署证书的标准格式,适合一次性导入所有相关内容。

执行CMD命令,通过刚刚公私钥文件来生成PFX文件。

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

二、组策略信任证书(如果没有AD域的,就想办法下发这个证书给终端并且安装)

1. 配置所有计算机自动信任根证书颁发机构证书

在任意一台DC上进入组策略管理,推荐在“Default Domain Policy”进行配置,组策略路径如下(例图),进入之后,右键导入,将刚刚的server.crt导入进去就行了。

2. 终端同步组策略

gpupdate /force

3. 完成

这个时候,用户打开装载了这个证书的网站,只要域名和证书里的域名一致,Chrome就会显示安全的证书了

如果还是提示不安全:

①使用无痕浏览模式,或清理浏览器缓存重新进入网站

②可以通过浏览器F12 - 安全(Security)来查看不安全的原因

三、(附)自行测试证书安全

如果只是在测试环境确定一下这种方式是否可行,可以用一个简单的python程序来模拟网站,装载证书,然后在C:\windows\system32\drivers\etc\host这里,改一下host,把目标域名指向127.0.0.1,运行这个python程序,然后直接在浏览器直接打开https://目标域名:4443,就能访问本机这个demo,来测试证书是否可用。

from http.server import HTTPServer, SimpleHTTPRequestHandler
import ssl
port = 4443
httpd = HTTPServer(('127.0.0.1', port), SimpleHTTPRequestHandler)
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain(certfile='server.crt', keyfile='server.key')  # 正确加载证书
httpd.socket = context.wrap_socket(httpd.socket, server_side=True)
print(f"Serving on https://localhost:{port}")
httpd.serve_forever()

http://www.dtcms.com/a/279488.html

相关文章:

  • [spring6: Resource ResourceLoader ResourceEditor]-加载资源
  • RocketMQ消息模型
  • 选择一个系统作为主数据源的优势与考量
  • Java-ThreadLocal
  • 微信131~140
  • Linux连接跟踪Conntrack:原理、应用与内核实现
  • OSPF高级特性之GR
  • echarts应用到swiper 轮播图中,每次鼠标一点击图表所在slide,图表就会消失
  • LSV负载均衡
  • PostgreSQL ExecInitIndexScan 函数解析
  • k8s-高级调度(二)
  • 如何使用Cisco DevNet提供的免费ACI学习实验室(Learning Labs)?(Grok3 回答)
  • PostgreSQL 16 Administration Cookbook 读书笔记:第6章 Security
  • DLL 文件 OSError: [WinError 1401] 应用程序无法启动问题解决
  • 七、深度学习——RNN
  • HTTPS 协议原理
  • ZYNQ双核通信终极指南:FreeRTOS移植+OpenAMP双核通信+固化实战
  • 一文明白AI、AIGC、LLM、GPT、Agent、workFlow、MCP、RAG概念与关系
  • 浏览器防录屏是怎样提高视频安全性?
  • 现有医疗AI记忆、规划与工具使用的创新路径分析
  • 【Linux网络】多路转接poll、epoll
  • vue3 JavaScript 获取 el-table 单元格 赋红色外框
  • mac上用datagrip连接es
  • MFC/C++语言怎么比较CString类型最后一个字符
  • K8S的平台核心架构思想[面向抽象编程]
  • LVS(Linux Virtual Server)集群技术详解
  • linux 内核: 访问当前进程的 task_struct
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 架构搭建
  • C++-linux 6.makefile和cmake
  • 深入掌握Performance面板与LCP/FCP指标优化指南