手动生成可信本地CA:OpenSSL构建X.509证书链实战

news2026/5/24 7:11:08
1. 为什么你真正需要的不是“买证书”而是搞懂CA签发逻辑很多人一听到“SSL/TLS证书”第一反应是去阿里云、腾讯云点几下鼠标花几十块钱买一张带绿色锁头的域名证书——这确实快但代价是你永远不知道那张证书里到底写了什么、谁在验证你、私钥是否真由你掌控、证书链为何断在第二级、浏览器突然报“NET::ERR_CERT_AUTHORITY_INVALID”时连排查方向都摸不着。我去年帮一家做IoT网关的客户排查设备批量掉线问题折腾三天才发现所有设备信任的本地根证书被误更新为自签名证书而新证书的Basic Constraints字段没设为CA:TRUE导致下游签发的设备证书全被系统拒绝校验。这不是配置错误是根本没理解CA的本质。这篇内容讲的就是从零手动生成一个可被操作系统和主流浏览器信任的本地证书颁发机构Local CA并用它签发可用于Nginx、OpenSSL服务端、甚至嵌入式HTTPS API的服务器证书。它不依赖任何云平台、不调用外部API、不走ACME协议、不碰Let’s Encrypt——全部基于OpenSSL原生命令行完成每一步都可审计、可复现、可嵌入CI/CD流水线。关键词很明确SSL/TLS证书生成、本地CA、OpenSSL、证书链、X.509标准、私钥安全、脚本自动化。适合三类人运维工程师要搭建内部测试环境HTTPS开发人员需在本地联调双向认证gRPC或mTLS服务安全工程师想亲手验证证书吊销、密钥轮换、扩展字段控制等底层机制。它不是“玩具”而是你真正掌握HTTPS信任链起点的必经之路。2. 本地CA不是“自签名证书”而是完整复刻公有CA的信任模型很多人混淆“自签名证书”和“本地CA”。前者是把一个证书的Subject和Issuer填成一样比如CNlocalhost同时出现在两个字段里这种证书只能自己信自己浏览器直接拦截后者是构建一个具备完整X.509层级结构的证书体系根CA → 中间CA可选→ 服务器证书。真正的CA必须满足四个硬性条件缺一不可私钥绝对离线保管根CA私钥绝不接触网络设备签发中间CA证书后即刻加密归档证书具备CA属性根证书的Basic Constraints必须为CA:TRUE且Key Usage含keyCertSign证书链可逐级验证服务器证书的Issuer必须匹配中间CA的Subject中间CA的Issuer又必须匹配根CA的SubjectCRL或OCSP支持能力可选但推荐虽本地环境常省略但结构上必须预留CRL Distribution Points或Authority Information Access扩展字段。我见过太多人用openssl req -x509 -newkey rsa:2048一条命令生成“根证书”结果发现openssl x509 -in ca.crt -text -noout输出里根本没有CA:TRUEKey Usage也只写了Digital Signature——这种证书签发的任何子证书在Chrome 90、macOS Monterey之后全被拒绝因为现代TLS栈强制执行RFC 5280第4.2.1.9节关于CA证书的约束检查。下面这张表对比了典型错误做法与合规CA的关键差异检查项错误做法伪CA合规本地CA本文方案验证命令Basic Constraints缺失或为CA:FALSE显式声明CA:TRUE, pathlen:0根CA或pathlen:1中间CAopenssl x509 -in ca.crt -text -noout | grep -A1 Basic ConstraintsKey Usage仅Digital Signature必含keyCertSign, cRLSign根CA服务器证书仅Digital Signature, Key Enciphermentopenssl x509 -in ca.crt -text -noout | grep Key UsageSubject Alternative Name (SAN)完全缺失根CA证书中必须包含subjectKeyIdentifier服务器证书必须含subjectAltNameDNS/IPopenssl x509 -in server.crt -text -noout | grep -A1 Subject Alternative Name私钥保护PEM明文裸存使用AES-256-CBC加密密码强度≥12位文件权限chmod 400ls -l ca.key有效期默认30天或随意设10年根CA设10年符合NIST SP 800-57服务器证书≤1年遵循RFC 5280最佳实践openssl x509 -in ca.crt -dates -noout这个结构不是为了“看起来专业”而是因为操作系统证书存储区Windows Cert Store / macOS Keychain / Linux trust store在导入根证书时会严格解析上述字段并写入信任策略数据库。如果pathlen设错后续签发的中间CA会被系统判定为无效如果subjectKeyIdentifier缺失证书链路径构建会失败导致openssl verify -CAfile ca.crt server.crt返回unable to get local issuer certificate。实操中我踩过最深的坑是用OpenSSL 1.1.1编译的ca命令签发中间CA时若配置文件未显式指定[ ca ]段下的default_days 3650它会沿用默认的30天——而根CA有效期30天这等于每天都要重签完全违背CA设计初衷。后来我改用openssl req -new -x509 -days 3650手动构造根证书并用-extfile参数注入所有X.509 v3扩展彻底绕过ca命令的隐式限制。这个细节90%的教程都一笔带过但它直接决定你的本地CA能否稳定运行三年以上。3. 手动构建CA证书链从根证书到服务器证书的七步精准操作现在我们进入核心实操环节。整个流程不依赖任何图形界面或第三方工具全部使用OpenSSL 1.1.1原生命令确保在CentOS 7、Ubuntu 22.04、macOS Ventura上100%复现。关键原则是每一步生成的文件都必须通过独立命令验证绝不假设“上一步成功了就跳过检查”。我曾因跳过中间CA证书的openssl verify验证导致后续服务器证书在curl中报SSL_ERROR_BAD_CERT_DOMAIN排查两小时才发现中间CA的subjectAltName漏写了DNS名称。3.1 创建安全的CA工作目录与密钥策略首先建立隔离的工作空间避免密钥污染mkdir -p ~/my-ca/{private,csr,certs,newcerts} chmod 700 ~/my-ca/private chmod 755 ~/my-ca/{csr,certs,newcerts} echo 1000 ~/my-ca/serial touch ~/my-ca/index.txt提示index.txt是OpenSSLca命令的数据库索引文件必须为空serial文件存储下一个证书序列号初始值设为1000而非1避免与历史测试证书冲突private目录权限必须为700否则OpenSSL会拒绝读取私钥。接着定义密钥安全策略。我们不采用默认的RSA-1024已被NIST弃用也不盲目上RSA-4096性能损耗大而是选择RSA-3072——它提供128位安全强度密钥体积适中Nginx/OpenSSL 1.1.1原生支持且兼容所有现代客户端。生成根CA私钥命令如下openssl genrsa -aes256 -out ~/my-ca/private/ca.key.pem 3072注意-aes256启用密码保护输入密码后务必记录在安全的地方如1Password的Secure Note。切勿使用-nodes参数跳过加密——这是本地CA最大的安全破绽。3.2 构造根CA证书注入所有必需X.509 v3扩展根CA证书不能靠openssl req -x509简单生成必须用配置文件精确控制每个扩展字段。创建~/my-ca/openssl-ca.cnf[ ca ] default_ca CA_default [ CA_default ] dir /Users/yourname/my-ca certs $dir/certs crl $dir/crl private_key $dir/private/ca.key.pem certificate $dir/certs/ca.cert.pem crlnumber $dir/crlnumber crl $dir/crl/ca.crl.pem database $dir/index.txt serial $dir/serial RANDFILE $dir/private/.rand [ req ] default_bits 3072 distinguished_name req_distinguished_name x509_extensions v3_ca string_mask utf8only default_md sha256 [ req_distinguished_name ] countryName Country Name (2 letter code) countryName_default CN stateOrProvinceName State or Province Name stateOrProvinceName_default Beijing localityName Locality Name localityName_default Haidian organizationName Organization Name organizationName_default MyLocalCA commonName Common Name commonName_default MyLocal Root CA commonName_max 64 [ v3_ca ] subjectKeyIdentifierhash authorityKeyIdentifierkeyid:always,issuer basicConstraintscritical,CA:true,pathlen:0 keyUsagecritical,digitalSignature,cerKeySign,cRLSign重点看[v3_ca]段pathlen:0表示该CA不能再签发下级CA防止滥用critical前缀确保客户端强制检查这些字段。生成证书命令openssl req -config ~/my-ca/openssl-ca.cnf \ -key ~/my-ca/private/ca.key.pem \ -new -x509 -days 3650 -sha256 \ -extensions v3_ca \ -out ~/my-ca/certs/ca.cert.pem验证是否合规openssl x509 -in ~/my-ca/certs/ca.cert.pem -text -noout | grep -E (CA:|Key Usage|X509v3)正确输出应包含X509v3 Basic Constraints: critical CA:TRUE, pathlen:0 X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:783.3 签发中间CA证书解耦根CA与日常签发生产环境中根CA必须离线保存所有日常签发交由中间CA完成。这不仅是安全最佳实践更是应对密钥泄露的快速响应机制——只需吊销中间CA证书无需动根CA。创建中间CA私钥openssl genrsa -aes256 -out ~/my-ca/private/intermediate.key.pem 3072生成中间CA证书签名请求CSRopenssl req -config ~/my-ca/openssl-ca.cnf \ -key ~/my-ca/private/intermediate.key.pem \ -new -sha256 \ -out ~/my-ca/csr/intermediate.csr.pem关键来了用根CA私钥签发中间CA证书但扩展字段必须降级——pathlen:1允许它再签一级CA:true保留但keyUsage去掉cRLSign除非你真要建CRL服务openssl ca -config ~/my-ca/openssl-ca.cnf \ -extensions v3_intermediate_ca \ -days 1825 -notext -md sha256 \ -in ~/my-ca/csr/intermediate.csr.pem \ -out ~/my-ca/certs/intermediate.cert.pem \ -keyfile ~/my-ca/private/ca.key.pem \ -cert ~/my-ca/certs/ca.cert.pem为此需在openssl-ca.cnf末尾追加[ v3_intermediate_ca ] subjectKeyIdentifierhash authorityKeyIdentifierkeyid:always,issuer basicConstraintscritical,CA:true,pathlen:1 keyUsagecritical,digitalSignature,cerKeySign验证中间CA证书openssl x509 -in ~/my-ca/certs/intermediate.cert.pem -text -noout | grep -A1 Basic Constraints # 应输出CA:TRUE, pathlen:1 openssl verify -CAfile ~/my-ca/certs/ca.cert.pem ~/my-ca/certs/intermediate.cert.pem # 应输出OK3.4 生成服务器证书必须含SAN且密钥分离服务器证书不能复用中间CA私钥必须为每个服务生成独立密钥对。以localhost为例openssl genrsa -out ~/my-ca/private/server.key.pem 2048生成CSR时必须通过-addext注入SAN字段OpenSSL 3.0支持旧版需用配置文件openssl req -key ~/my-ca/private/server.key.pem \ -new -sha256 \ -addext subjectAltNameDNS:localhost,IP:127.0.0.1 \ -out ~/my-ca/csr/server.csr.pem \ -subj /CCN/STBeijing/LHaidian/OMyApp/CNlocalhost注意-subj中的CN只是传统兼容字段现代TLS校验完全依赖subjectAltName。若漏掉-addextNginx会启动成功但浏览器报ERR_CERT_COMMON_NAME_INVALID。用中间CA签发openssl ca -config ~/my-ca/openssl-ca.cnf \ -extensions server_cert \ -days 365 -notext -md sha256 \ -in ~/my-ca/csr/server.csr.pem \ -out ~/my-ca/certs/server.cert.pem \ -keyfile ~/my-ca/private/intermediate.key.pem \ -cert ~/my-ca/certs/intermediate.cert.pem对应配置段[ server_cert ] basicConstraints CA:FALSE nsCertType server nsComment OpenSSL Generated Server Certificate subjectKeyIdentifier hash authorityKeyIdentifier keyid,issuer:always keyUsage critical, digitalSignature, keyEncipherment extendedKeyUsage serverAuth subjectAltName alt_names [ alt_names ] DNS.1 localhost IP.1 127.0.0.1最后合并证书链供服务端使用Nginx要求fullchain.pem包含服务器证书中间CA证书cat ~/my-ca/certs/server.cert.pem \ ~/my-ca/certs/intermediate.cert.pem \ ~/my-ca/certs/fullchain.pem3.5 信任根证书让系统和浏览器真正认可它生成完证书链必须将根CA证书导入操作系统信任库否则所有HTTPS请求仍会报错。各平台操作不同macOS双击ca.cert.pem→ 导入钥匙串 → 右键证书 → “显示简介” → “信任” → “始终信任”Windows右键ca.cert.pem→ “安装证书” → 本地计算机 → 受信任的根证书颁发机构Ubuntu/Debiansudo cp ~/my-ca/certs/ca.cert.pem /usr/local/share/ca-certificates/mylocal-ca.crt sudo update-ca-certificatescurl/wget测试curl --cacert ~/my-ca/certs/ca.cert.pem https://localhost:8443重要经验macOS Keychain中导入后必须重启Safari或Chrome非仅刷新页面因为证书信任状态在进程启动时加载。曾有同事反复导入却始终报错最后发现Chrome窗口是几天前打开的。4. 自动化脚本详解一行命令生成全链路证书手工操作适合理解原理但日常开发需要一键生成。我写的gen-local-ca.sh脚本已稳定运行两年被集成进公司前端本地开发环境。它不是简单封装OpenSSL命令而是内置了防错校验、路径安全、密码交互、多平台适配四大机制。脚本核心逻辑分五层环境预检层检测OpenSSL版本≥1.1.1、当前用户UID拒绝root直接运行、工作目录权限密码策略层生成16位随机密码大小写字母数字符号用openssl rand -base64 12 | tr / -_避免特殊字符引发shell解析错误证书结构层自动创建ca/intermediate/server三级目录按NIST标准设置有效期根CA 10年、中间CA 5年、服务器证书1年扩展字段层动态生成openssl.cnf根据传参自动注入subjectAltName支持多个DNS/IP信任注入层检测macOS/Linux平台自动执行security add-trusted-cert或update-ca-certificates。脚本调用示例# 生成根CA 中间CA localhost证书 ./gen-local-ca.sh --domain localhost --ip 127.0.0.1 # 生成支持多域名的证书用于微服务网关 ./gen-local-ca.sh --domain api.local --domain admin.local --ip 192.168.1.100 # 指定输出目录和密码文件 ./gen-local-ca.sh --output ./my-dev-ca --password-file ./ca-pass.txt脚本关键片段简化版#!/bin/bash # gen-local-ca.sh set -e # 任一命令失败即退出 # 参数解析 while [[ $# -gt 0 ]]; do case $1 in --domain) DOMAINS($2) shift 2 ;; --ip) IPS($2) shift 2 ;; --output) OUTPUT_DIR$2 shift 2 ;; esac done # 生成随机密码 PASS$(openssl rand -base64 12 | tr / -_) echo $PASS ${OUTPUT_DIR}/ca-password.txt chmod 400 ${OUTPUT_DIR}/ca-password.txt # 动态生成openssl.cnf中的[alt_names] ALT_NAMES for d in ${DOMAINS[]}; do ALT_NAMES${ALT_NAMES}DNS.$((i)) $d$\n done for ip in ${IPS[]}; do ALT_NAMES${ALT_NAMES}IP.$((i)) $ip$\n done # 写入配置文件此处省略具体echo逻辑 cat ${OUTPUT_DIR}/openssl.cnf EOF [req] ... [alt_names] ${ALT_NAMES} EOF # 执行签发此处省略具体openssl命令 openssl req -x509 -days 3650 -key ... -out ${OUTPUT_DIR}/ca.crt实操心得脚本中所有路径变量必须用${VAR}包裹否则含空格的路径如/Users/John Doe/my-ca会导致OpenSSL报No such file or directoryset -e是生命线避免某步失败后继续执行导致证书链断裂密码文件权限chmod 400必须显式设置否则Git提交时可能被误检为敏感信息。5. 常见故障排查从报错日志反推证书链缺陷即使严格按照上述步骤操作仍可能遇到各种报错。我整理了过去三年处理的27个真实案例按发生频率排序给出从错误现象→定位命令→根因分析→修复动作的完整链路。5.1 浏览器报“您的连接不是私密连接”NET::ERR_CERT_AUTHORITY_INVALID现象Chrome地址栏显示红色警告点击“详细信息”看到“此服务器无法证明其身份”。定位命令# 检查证书链完整性 openssl s_client -connect localhost:443 -showcerts /dev/null 2/dev/null | openssl x509 -noout -text | grep -E (Issuer|Subject|CA:) # 检查是否被系统信任 security find-certificate -p /System/Library/Keychains/SystemRootCertificates.keychain | grep -A1 MyLocal Root CA根因分析90%概率是根CA证书未正确导入系统信任库剩余10%是证书链文件缺失中间CANginx配置中只指定了ssl_certificate未配ssl_certificate_key对应的fullchain.pem。修复动作macOS打开“钥匙串访问”→左侧选“系统”→拖入ca.cert.pem→右键→“显示简介”→“信任”→“始终信任”Nginx配置必须包含ssl_certificate /path/to/fullchain.pem; # 服务器证书中间CA ssl_certificate_key /path/to/server.key.pem;5.2 curl报“unable to get local issuer certificate”现象curl --cacert ca.crt https://localhost失败提示找不到颁发者。定位命令# 检查服务器证书的Issuer字段 openssl x509 -in server.crt -noout -issuer # 检查中间CA证书的Subject字段 openssl x509 -in intermediate.crt -noout -subject # 二者必须完全一致包括空格、大小写根因分析OpenSSLca命令签发时若-cert参数指定的中间CA证书与CSR中Issuer不匹配会导致证书链断裂。常见于复制粘贴配置时多了一个空格。修复动作用diff (openssl x509 -in intermediate.crt -subject -noout) (openssl x509 -in server.crt -issuer -noout)比对重新签发服务器证书确保-cert参数指向正确的中间CA证书文件。5.3 Nginx启动报“SSL_CTX_use_PrivateKey_file failed”现象nginx -t报错提示私钥格式错误或密码不匹配。定位命令# 检查私钥是否加密 openssl rsa -in server.key.pem -check -noout 21 | grep encrypted # 若加密测试密码是否正确 openssl rsa -in server.key.pem -passin pass:yourpassword -check -noout根因分析服务器私钥被AES加密但Nginx配置中未设置ssl_password_file或密码文件格式错误必须纯文本末尾无换行。修复动作方案一推荐生成无密码私钥openssl rsa -in server.key.pem -out server.key.unprotected.pem方案二在Nginx中添加ssl_password_file /path/to/password.txt; # 文件内容yourpassword5.4 OpenSSL verify返回“error 20 at 0 depth lookup: unable to get local issuer certificate”现象openssl verify -CAfile ca.crt server.crt失败。定位命令# 检查证书链顺序 cat fullchain.pem | awk /BEGIN CERTIFICATE/{i} {print i : $0} | head -20 # 正确顺序server.crt → intermediate.crt → 不含ca.crt根因分析verify命令的-CAfile只接受根CA若fullchain.pem中混入了根CA会导致验证器误认为中间CA的Issuer是根CA的Subject但实际中间CA的Issuer是根CA的Subject而fullchain.pem里没有根CA——所以必须确保-CAfile单独指向ca.crt而非fullchain.pem。修复动作openssl verify -CAfile ca.crt -untrusted intermediate.crt server.crt或更简洁openssl verify -CAfile (cat ca.crt intermediate.crt) server.crt5.5 证书在iOS设备上不被信任现象iPhone Safari访问https://test.local仍显示不安全。根因分析iOS 15强制要求证书必须包含Authority Information Access扩展指向OCSP或CA Issuers URL且subjectAltName必须包含所有访问域名test.local和192.168.1.100都得写。修复动作在openssl.cnf的[server_cert]段添加authorityInfoAccess OCSP;URI:http://ocsp.mylocal.ca,CA Issuers;URI:http://ca.mylocal.ca/ca.crt重新签发服务器证书。最后分享一个血泪教训某次给客户部署时我把ca.cert.pem文件名错写成ca.crt.pem然后在Nginx配置里引用了ca.crt.pem结果Nginx静默加载失败日志里没有任何错误——直到用strace -e traceopenat nginx -t才抓到它试图打开不存在的文件。从此我养成了习惯所有证书路径在配置前先用ls -l确认存在且可读所有Nginx reload必跟一句nginx -t nginx -s reload绝不省略-t测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2640121.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…