首页 / 资讯中心 / 文章详情

国密网站打不开?Chrome和IE访问国密HTTPS的完整解决方案

国密网站打不开?Chrome和IE访问国密HTTPS的完整解决方案 ★ FEATURED ARTICLE
这周二办公室一位同事甩了个链接过来说这个系统又打不开了。我打开Chrome一试直接给我一个大大的ERR_SSL_VERSION_OR_CIPHER_MISMATCH。再看IE更直接转了两圈弹个无法与服务器建立安全连接。一问才知道这又是一个上了国密算法的网站。这套场景这几年并不少见。政务、金融、招投标、企业内部OA越来越多的站点把HTTPS换成了国密HTTPS用的是SM2/SM3/SM4这套国产密码算法。可问题在于Chrome和IE这两大经典浏览器默认并不认识国密算法更不信任国家密码体系的证书链。结果就是网站明明在线别人都能开你这边死活连不上。这篇东西写给谁给那些跟我一样常年在系统交付、运维、办公电脑支持一线来回跑的人。你要面对的不是什么高深密码学问题而是如何在Chrome、IE里访问国密网站。核心思路不复杂无非三条路换支持国密的浏览器、给现有浏览器加插件支持、或者靠网关/代理把国密协议翻译成浏览器认识的协议。我把每条路都实操了一遍下面把细节、坑和判断逻辑一起写出来。1. 国密网站为什么在Chrome和IE里打不开先把原因弄清楚1.1 国密算法这套东西到底长什么样别一听国密就发怵本质上它就是一套密码算法标准。我这里不提政策只说技术事实国密算法体系里有三个核心成员SM2是椭圆曲线非对称算法主要做签名和密钥协商对标的是RSASM3是摘要算法输出256位哈希值对标的是SHA-256SM4是分组对称加密算法分组长度128位、密钥长度128位对标的是AES。当网站说上了国密一般指的是它的HTTPS证书链和TLS握手过程全部采用这套算法体系。具体到协议层面国密HTTPS遵循的是GMT 0024-2014规范证书里的签名算法是SM2-with-SM3TLS握手使用的密钥交换套件是ECC_SM4_CBC_SM3等。到了TLS 1.3时代也有对应的RFC 8998来定义国密套件。问题就出在证书和握手套件上。国际通用的HTTPS证书用的是X.509格式但里面的密钥算法、签名OID是RSA或ECDSA体系国密证书也是X.509格式但里面的算法标识是SM2体系。浏览器在做TLS握手时会先看对方支持哪些加密套件再看证书链是否由自己内置信任的根CA签发。这两个检查Chrome和IE对国密站点的默认态度都是不认识。1.2 Chrome和IE为何默认不支持国密按理说浏览器只是个软件加几个加密套件也不难。但实际情况是Chrome的内置加密套件列表是由BoringSSL决定的这个列表里没有国密套件的默认位置。虽然BoringSSL在技术上具备扩展能力但Chrome官方从来没有把国密套件纳入默认启用范围也不信任国密根CA。所以Chrome访问国密网站最常见的报错就是ERR_SSL_VERSION_OR_CIPHER_MISMATCH翻译成大白话就是双方在密码算法上谈不拢。IE的情况更特殊一点。IE本身依赖Windows的SChannel安全通道来承载TLS协议。Windows系统里能启用的加密套件是由组策略/SChannel配置控制的。老版本IE默认并不勾选国密套件而且很多国密站点的证书链需要手动导入受信任的根证书颁发机构少了这一步IE会直接判定证书不可信。再加上微软在Windows 11上交出了IE主力位置IE的TLS支持停在了TLS 1.2甚至更早的版本上面对强制要求TLS 1.3的国密新站点更加力不从心。1.3 你平时会遇到的国密网站有哪些结合我这两年实际碰到的场景国密网站的分布很有规律招投标类和公共资源交易类平台很多强制要求使用国密算法和对应CA签发的客户端证书打开页面先让你装证书驱动。企业网银、电子签章、电子合同平台涉及数字签名和身份认证的页面几乎都是国密通道。大型企事业单位的内部门户、OA、邮件系统考虑到安全合规要求也陆续在做国密HTTPS改造。跟财务软件配套的Web组件比如用友U8的某些远程功能模块新一代部署也会用到国密协议。遇到这些站点用普通Chrome访问十有八九会失败。但注意并不是做国密改造的站点就完全不能用Chrome打开有的站点做了双证书双通道会优先尝试国密、失败后自动降级到国际算法。判断标准很简单你直接访问时如果浏览器报算法不匹配而你用支持国密的浏览器或插件能正常打开那就属于纯国密站点。这种情况才需要下面的方案。2. 最稳的路径直接用带国密算法的国密浏览器2.1 主流国密浏览器有哪些说实话在我把所有折腾方案都试过之后给普通办公用户的第一建议永远是装一个国密浏览器。这比给Chrome装插件、配代理省心一百倍尤其适合那种我就想打开网站办个事的业务人员。目前市面上我能正常用到的国密浏览器主要有这几类红莲花安全浏览器、奇安信可信浏览器、零信浏览器以及部分老牌国产浏览器的国密版。它们基本都是基于Chromium开源内核改的区别在于在TLS层内置了国密套件、预置了主流国密根证书有的还集成了CA客户端控件和USB Key调用能力。选型上我给个非常实际的标准你说不清自己属于哪个CA体系就选预置证书最多的那款你是某个行业软件的用户优先看软件官方推荐的是哪款别自己乱换。比如做招投标项目招标文件里通常会写推荐使用XX浏览器那就照着装。别问我哪款最强我的真实体会是在当前国密生态里哪家CA体系认哪家浏览器比哪款浏览器技术最强更重要。2.2 下载安装后的几个容易踩的坑国密浏览器安装本身不复杂但有几个细节值得多说两句一是下载渠道。一定要到厂商官网或当地政务/招投标平台指定的下载入口下载安装包。国密浏览器涉及根证书和加密模块从不知名下载站搞来的版本很可能被篡改了内置证书或塞了推广组件。我在一台客户电脑上见过装完国密浏览器后主页被改、还多出三个弹窗广告的情况八成就是第三方下载站打包的。二是证书信任链问题。有些国密浏览器第一次访问站点时仍然弹证书不受信任的提示这并不一定是浏览器不行而是站点证书链不完整。解决办法是把该站点对应的根证书和中级证书手动导入浏览器的证书管理器里。注意这里说的是浏览器的证书管理器不是Windows系统证书库因为国密浏览器通常自带独立的证书存储。三是版本别太旧。有些国密浏览器停在Chromium 70、80这个区间对新型国密站点的TLS 1.3支持可能有问题。碰到打开白屏半天没反应的情况第一件事就是升到新版本。国密浏览器建议还是保持自动更新开启不要学某些人给Chrome关更新那一套用在它身上。2.3 国密浏览器解决不了的事别把所有希望都押在上面国密浏览器不是万能的。现实里还有两类问题它解决不了第一类是ActiveX控件。有些老系统的网页登录、文件上传、印章验证功能走的是IE的ActiveX控件通道。哪怕你用了国密浏览器只要是Chromium内核就不会执行ActiveX。这种时候还得回IE或Edge的IE兼容模式跟国密算法没关系纯粹是老技术栈的兼容问题。第二类是某些自定义客户端软件。比如网银的USB Key驱动、数字证书客户端组件它们可能只识别固定的浏览器进程名或者通过本地协议调起外部程序。国密浏览器如果不被这些客户端软件认可也会出现检测不到Key之类的问题。所以我的建议是办公电脑上可以双浏览器并行——国密浏览器用来访问国密HTTPS站点再用Chrome对应访问常规互联网另外把Edge的IE模式准备好以备ActiveX场景。三管齐下覆盖面基本就全了。3. Chrome环境下访问国密网站的可行方案3.1 方案A通过国密SSL网关或代理做协议转换如果你工作环境里掌握着网站部署权限或者公司有运维团队那最优解其实是国密SSL网关。这个思路是这样的国密网关部署在国密网站前面对外仍然提供国密HTTPS端口但对内也就是面向浏览器那侧可以把协议转换成标准TLS或者直接把国密站点以普通HTTPS的形式反代出来。对你个人而言只要公司搭好了网关Chrome、IE、手机浏览器统统不用改直接访问网关提供的地址就行。这类网关设备在政务云、企业内网里很常见你只要知道它存在的意义就行它是把国密协议翻译给普通浏览器看的中间人。如果你自己有动手能力也可以用开源软件模拟一个简易网关。我实测过的一种做法是用nginx加国密支持模块来承载站点证书再把443端口映射出来。配置核心是把站点原本的国密证书配置到nginx上同时开启标准SSL协议作为降级通道。但这条路的复杂度不低而且要自己搞定证书链一般用户不建议碰除非你本身就是系统管理员。3.2 方案B安装国密客户端插件没有网关权限Chrome能用的最直接方案是装一个国密支持的浏览器插件。现在不少CA机构和安全厂商做了针对Chrome的国密套件支持扩展原理是在浏览器发起的TLS握手过程中注入国密算法套件或者在浏览器层面接管国密站点的证书验证逻辑。实操步骤大体是先到厂商官网下载crx格式的插件包然后打开Chrome的扩展程序管理页chrome://extensions/右上角打开开发者模式再把crx文件拖进页面直接安装。如果拖拽安不上可以点加载已解压的扩展程序选中解压后的插件目录。这里我踩过一个实实在在的坑有些Chrome版本出于安全限制会拦截未上架Chrome应用商店的crx文件界面直接灰掉连添加按钮都不给。这时候先确认你是不是开着开发者模式。如果开着还不行多半是企业组策略锁住了扩展安装权限需要找IT放开允许安装来自其他来源的扩展这个策略项。3.3 方案C配置本机代理/证书做一个简易中间层插件方案Cover不住的场景还可以用本机代理转换。思路是在你自己电脑上跑一个本地代理工具让它去连接国密网站把国密SSL握手完成后再以普通HTTP/HTTPS转发给Chrome访问。Chrome上只需要把对应站点的代理指到127.0.0.1的本地端口即可。方案本身可用但实现起来坑也不少。核心前提是本地代理必须能通过国密验证所以代理端要装国密证书这就牵扯到把代理自己生成的CA证书导入到系统受信任的根证书颁发机构里。一旦证书没导对Chrome会报NET::ERR_CERT_AUTHORITY_INVALID。而且这种中间层方案会拖慢访问速度、增加排障难度我只推荐给临时救急或技术折腾党正规办公环境还是优先考虑网关或插件。3.4 Chrome版本和环境准备老机器别乱升再说一个容易忽略的环境问题。Chrome对操作系统的支持是有断层的最简单的例子Chrome 109是最后一个支持Windows 7和Windows 8.1的版本后面的Chrome 110起已经不在Win7上提供官方支持了。我手头还有两台Win7的老办公机访问国密站点时用的一直是Chrome 109的离线安装包。这里给大家提个醒如果你还在Win7上用Chrome别随便点更新到最新版否则版本上去后系统不支持Chrome直接跑不起来。正确的姿势是专门保存一份109版本的离线安装包备用。另外Chrome自动更新在Win10/11上也是默认开的如果你依赖某个旧版本配合国密插件使用记得把更新策略关掉或者锁版本。还有一个小坑清理Windows临时文件和优化工具会顺带把Chrome的Profile文件夹里的Local Storage、缓存给清理掉导致一些国密站点的登录态丢失。更严重的是误删书签文件。我见过有人手滑删了整个Chrome用户数据目录里面带有大量重要书签。真要动手清理之前先把%LOCALAPPDATA%\Google\Chrome\User Data\Default目录下的Bookmarks和Bookmarks.bak复制出来备份这两文件恢复书签足够用了。4. IE环境下访问国密网站配置、控件与兼容模式4.1 IE访问国密网站的两个前置条件虽然IE已经逐步退出历史舞台但很多内网系统的ActiveX控件和经年老代码还赖在IE上。国密站点在IE上能不能打开核心看两件事第一证书链是否导入。国密网站的根证书通常不在Windows系统内置信任列表里你不手动导入IE一定提示证书错误。操作路径是Internet选项 → 内容 → 证书 → 受信任的根证书颁发机构 → 导入。有时还要在中级证书颁发机构里做同样的导入。注意导入时要放在正确的存储区放错地方等于白导。第二ActiveX控件是否安装。国密网页里的加解密、盖章、U-Key调用大量依赖ActiveX控件。你要先把网站加进受信任的站点再把该区域的安全级别调低到中低或自定义启用允许运行ActiveX控件然后在弹窗里装控件。如果装完刷新还是提示需要安装控件往往是控件被杀毒软件拦截了临时关掉安全软件再装一次是常见操作。4.2 用友U8这类系统的IE兼容问题怎么处理热搜词里频繁出现用友U8安装时IE Web Control组件安装不上这个问题我在这几年的企业运维里碰了不下十次。现象通常是这样在用友U8的客户端或Web端登录页面安装IE Web Control时进度条一直不动或者安装完刷新页面依然提示组件缺失。原因分析下来一般有三类一是权限不足。这个组件本质上是个ActiveX插件安装过程要写注册表、要写系统目录不右键以管理员身份运行安装程序基本都会失败。二是安装临时文件路径被清理。ActiveX组件的cab包会先解压到Internet临时文件夹如果你用了清理工具把临时目录清得干干净净再点安装就会卡住。解决思路是手动把cab包下载下来解压后用regsvr32注册对应的dll文件。三是DEP数据执行保护拦了控件。在系统属性 → 高级 → 性能设置 → 数据执行保护里把相关dll或浏览器进程加进排除列表这一条在部分Win7电脑上有效。讲到这里顺便提一句不少单位还在怀念IE其实Edge的Internet Explorer模式就是替代老IE的最现实方案。在Edge地址栏输入edge://settings/defaultBrowser找到允许在Internet Explorer模式下重新加载网站设为允许再把需要兼容的站点加进IE模式页面列表即可。Edge新版还支持组策略去配置站点列表一次性下发到整个域环境省得每台电脑手点。这个方案同样适配国密网站因为IE模式底层调用的是系统的TLS兼容逻辑而国密证书如果已经导入系统库IE模式下也能正常识别。4.3 把IE固定成企业模式常用设置清单如果你必须死守IE我给你一个相对靠谱的基线配置清单照着过一遍能解决大部分国密站点打不开的问题Internet选项 → 安全 → 受信任的站点把国密站点的域名加进去且不要勾选对该区域中的所有站点要求服务器验证(https:)。Internet选项 → 安全 → 受信任的站点 → 自定义级别把ActiveX控件和插件相关的子项全部改为启用或提示。Internet选项 → 高级 → 安全勾选使用TLS 1.2如果站点要求也勾上TLS 1.0和TLS 1.1。Internet选项 → 高级 → 重置如果之前设置被搞乱先重置IE设置再按上面步骤来。如果IE一启动就被Edge截胡去Windows设置里搜索默认浏览器把IE相关的切换选项改回从不。系统级策略里也有个IE自动跳转Edge的控制选项关闭后IE才能老实干活。5. 常见问题与排查技巧5.1 从报错到原因的问题速查表下面这个表是我这几年排查国密站点访问问题时最常用的一张表遇到问题先对着看一遍基本上能定位80%的情况报错/现象可能原因解决办法Chrome报ERR_SSL_VERSION_OR_CIPHER_MISMATCHChrome不认识国密套件换国密浏览器或装国密插件/网关代理IE提示无法与服务器建立安全连接系统TLS套件未启用国密/证书不受信任导入国密根证书启用TLS 1.2页面白屏但状态栏显示连接成功页面调用了ActiveX控件且控件未装安装对应控件并加入受信任站点ActiveX控件安装后刷新又提示未安装安装未生效或被杀软拦截管理员权限重装临时关闭安全软件国密浏览器打开站点提示证书不受信任证书链不完整或浏览器证书库缺中间证书手动导入完整证书链用友U8 IE Web Control安装不上临时目录被清、权限不足、DEP拦截以管理员运行、手动regsvr32注册、关DEPEdge IE模式下站点显示乱版兼容性视图未配置/文档模式不对在IE模式站点列表加域名指定文档模式为EdgeHTML或IE11Chrome无法安装国密扩展企业策略或开发者模式未开启开启开发者模式解除扩展安装限制5.2 环境排查的三板斧第一板斧判断是不是纯算法问题。你如果在国密浏览器里能正常打开某个站点而Chrome打不开那就是加密套件和证书的问题如果国密浏览器也打不开那问题可能出在DNS解析、网络连通或者服务器本身和国密不国密没关系。这个区分能帮你少走很多弯路。第二板斧看TLS握手细节。Chrome访问失败时按F12打开开发者工具切到Security面板能看到失败原因和证书状态。想看得更细地址栏输入chrome://net-internals/#hsts查HSTS状态用chrome://net-internals/#events抓事件日志。Chrome的TLS握手日志对定位有没有发出ClientHello服务器回了什么证书很有帮助。第三板斧检查证书链。Windows上用certmgr.msc打开证书管理器看目标站点的根证书和中间证书是否已经存在受信任的根证书颁发机构和中间证书颁发机构里。缺少任何一环访问都会失败。还有一种情况是证书导入了个人存储区这种是无效的必须放到正确的区域。5.3 几个不常被写进文档的小经验最后分享几条比较冷门但实测有用的经验一是HSTS残留会坑人。如果你之前访问某个域名时用了HTTPS并且目标服务器返回了HSTS头Chrome会强制用HTTPS连接。之后网站改成国密端口了或者你用本地代理做转换时HSTS还在强制要求直连HTTPS导致代理不生效。这种时候去chrome://net-internals/#hsts里删除对应域名的HSTS状态即可。二是Chrome的始终使用安全连接选项要留意。Chrome新版内置了HTTPS-First Mode如果开启访问HTTP站点也会自动升级成HTTPS。某些国密内网站点只支持HTTP或国密特殊端口被强制升级就挂了。遇到内网站点打不开先检查这个设置。三是国密站点的端口不一定是443。不少国密站点走的是8443、9443或者自定义端口有的还分国密入口和国际算法入口两个地址。你从网上搜到的某个地址打不开未必是方案不对可能是入口用错了。最简单的识别办法看一下同单位的其他人是用哪个地址访问的照着来。四是如果你想批量验证一批站点的国密证书状态可以试试Chrome的远程调试接口CDP。通过VBA或者Python脚本连上Chrome的远程调试端口用DevTools Protocol里的Security.enable功能读取页面证书信息。我之前写过一个小的批量检查脚本把一个单位的十几个国密站点轮询一遍证书有效期和算法比手动一个个点开看快得多。这个属于进阶玩法但确实能省不少事。我的实际体会是访问国密网站这件事儿心态上要掰成两半看一半是算法层面的能不能握手一半是控件层面的能不能干活。前者靠国密浏览器、插件、网关、证书导入解决后者靠ActiveX兼容、IE模式、控件安装解决。很多人在国密网站上栽跟头都是把这两件事混在一起排查结果越查越乱。你先分清是哪一类再对号入座地处理问题基本都能收掉。现在我这边的标准做法是每位同事的办公电脑上装一个国密浏览器应对国密HTTPS站点Edge开启IE模式应对老控件系统Chrome只访问常规网站。三套环境各管一段互不干扰半年下来几乎没有再因为国密站点访问问题找我加班的。你也可以按这套组合试试看。
阅读完成 · 觉得有帮助?
咨询建站