-
2021-11-24 18:44:00
原因
windows系统根证书未正确安装
解决步骤
- 用浏览器下载沃通SSL的系统根证书更新工具
https://www.wosign.com/download/rootsupd.exe - 关掉360等杀毒软件
- 双击打开rootsupd.exe 会有界面一闪而过,或者干脆不出现
- 重启电脑即可,打开jd.com试下
详情:
WoSign - 自动升级更新Windows 2000 根证书
https://www.wosign.com/download/winroot.htm
更多相关内容 - 用浏览器下载沃通SSL的系统根证书更新工具
-
windows服务器ssl证书创建、安装及配置方法
2020-09-30 04:40:40主要介绍了windows服务器ssl证书创建、安装及配置方法,需要的朋友可以参考下 -
解决无法将这个证书验证到一个受信任的证书颁发机构方法
2020-11-14 20:49:14解决无法将这个证书验证到一个受信任的证书颁发机构方法 -
windows 无法验证此驱动程序软件的发布者.docx
2020-03-17 14:58:37在windows 7 和Vista操作系统上安装驱动的时候,往往会遇到一红色的安全警告框,提示“windows 无法验证此驱动程序软件的发布者”然后让用户选择“不继续安装此驱动程序软件”或者“始终安装此驱动程序软件”。 -
访问网站浏览器左上角提示:windows 没有足够信息,不能验证该证书
2019-05-07 11:28:28点击查看证书路径 在另一个电脑中访问该网站,...在另一台电脑接收文件,然后右键安装该证书,并且进入不能访问网站的电脑浏览器设置中心找到管理证书,我这里使用的是google浏览器 选择导入 选择接收到证书文件...点击查看证书路径
在另一个电脑中访问该网站,我使用的浏览器是Mozilla Firefox览器
选择 More Infornation 导出该安全证书
把导出的证书发送给刚刚不能访问的该网站的电脑,记得你电脑访问该网站必须是正常的
在另一台电脑接收文件,然后右键安装该证书,并且进入不能访问网站的电脑浏览器设置中心找到管理证书,我这里使用的是google浏览器
选择导入
选择接收到证书文件,一直单击下一步,直到浏览器系统提示 “导入成功”
关闭浏览器,重新打开浏览器,打开网站就可以正常访问了 -
windows没有足够信息,不能验证该证书 解决记录
2020-05-23 16:57:16我们可以看到提示windows没有足够信息,不能验证该证书。 原因是我们系统中没有找到此网站的证书 先点击证书路径,看看是哪个证书提示错误 我们可以在详细信息里面找到此证书的名字,或者是颁发者, 进入这个网站...我们在打开https的网站的时候,有时候会提示这个,
这个的原因是因为没有加载到证书的原因,当然也可以跳过,点击页面的高级,可以跳过验证直接进入,
这次我们记录的是如何把这个证书加载到
点击浏览器的不安全或者一个🔒的符号
我们可以看到提示windows没有足够信息,不能验证该证书。
原因是我们系统中没有找到此网站的证书
先点击证书路径,看看是哪个证书提示错误
我们可以在详细信息里面找到此证书的名字,或者是颁发者,
进入这个网站搜索一下缺少的证书或者直接百度也可以搜索到
点击下载
点击安装证书
但是如果再次按照之前的步骤查看证书信息的时候出现这个
就需要把这个证书放到信任列表里面去
下面是步骤
添加证书 然后下一步
导入你之前下载的证书就可以了
-
Windows下验证https证书
2019-01-16 15:14:10这种方式的好处是即使Windows证书不全,也能自动更新,缺点是验证时间可能会很长。 将libcurl的openssl替换为winssl即可,替换后在实体机上运行正常,但是在虚拟机内新安装的Win7却出现了错误提示:由于吊销服务器...最近在写一个Windows桌面程序需要给https请求加上证书验证,使用的http库是libcurl+openssl,使用openssl自带的证书验证功能,只能内嵌CA证书,但是我的程序不方便更新,所以最好的方式是使用Windows的证书存储做验证,这里有两种方式。
- 遍历Windows信任证书,将这些证书加入到证书存储区
- 使用Windows接口验证证书链
遍历Windows信任证书,将这些证书加入到证书存储区
这种方式的缺点是如果Windows没有安装服务端使用的CA证书,验证会失败。
void addCertificatesForStore(X509_STORE *certStore,const char *subSystemName) { HCERTSTORE storeHandle = NULL; PCCERT_CONTEXT windowsCertificate = nullptr; do { HCERTSTORE storeHandle = CertOpenSystemStoreA(NULL, subSystemName); if (!storeHandle) { break; } while (windowsCertificate=CertEnumCertificatesInStore(storeHandle, windowsCertificate)) { X509 *opensslCertificate = d2i_X509(nullptr, const_cast<unsigned char const **>(&windowsCertificate->pbCertEncoded), windowsCertificate->cbCertEncoded); if (opensslCertificate) { X509_STORE_add_cert(certStore, opensslCertificate); X509_free(opensslCertificate); } } } while (false); if (storeHandle) { CertCloseStore(storeHandle, 0); } } int sslContextFunction(void* curl, void* sslctx, void* userdata) { auto certStore = SSL_CTX_get_cert_store(reinterpret_cast<SSL_CTX *>(sslctx)); if (certStore) { addCertificatesForStore(certStore, "CA"); addCertificatesForStore(certStore, "AuthRoot"); addCertificatesForStore(certStore, "ROOT"); } return CURLE_OK; } curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1); curl_easy_setopt(curl, CURLOPT_SSL_CTX_FUNCTION, sslContextFunction);
使用Windows接口验证证书链
这种方式的好处是即使Windows证书不全,也能自动更新,缺点是验证时间可能会很长。
将libcurl的openssl替换为winssl即可,替换后在实体机上运行正常,但是在虚拟机内新安装的Win7却出现了错误提示:由于吊销服务器已脱机,吊销功能无法检查吊销。
原来Windows在验证证书的时候会默认通过网络获取CA的CRL(证书吊销列表),检查该证书是否已被吊销。我们可以通过libcurl设置不检查CRL(这样做会不安全)。
curl_easy_setopt(curl, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NO_REVOKE);
禁用证书吊销检查后依然出错了,显示15秒超时。
为了知道是哪一步出问题了,我自己写了验证证书代码(使用Windows接口)来代替libcurl的默认实现,代码可以参考libcurl,php,chromium,使用CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY可以阻止从网络获取CRL。
static int sslContextFunction(void* curl, void* sslctx, void* userdata) { SSL_CTX *sslContext = reinterpret_cast<SSL_CTX *>(sslctx); SSL_CTX_set_verify(sslContext, SSL_VERIFY_PEER, NULL); SSL_CTX_set_cert_verify_callback(sslContext, sslVerifyCallback, userdata); return CURLE_OK; } static int sslVerifyCallback(X509_STORE_CTX *x509_store_ctx, void *arg) { BOOL ret = FALSE; PCCERT_CONTEXT certCtx = nullptr; PCCERT_CHAIN_CONTEXT certChainCtx = nullptr; unsigned char *derBuf = nullptr; unsigned char *certNameUtf8 = nullptr; int derLen; #if OPENSSL_VERSION_NUMBER < 0x10100000L X509 *cert = x509_store_ctx->cert; #else X509 *cert = X509_STORE_CTX_get0_cert(x509_store_ctx); #endif do { /* First convert the x509 struct back to a DER encoded buffer and let Windows decode it into a form it can work with */ derLen = i2d_X509(cert, &derBuf); if (derLen < 0) { LOG_ERROR("encoding X509 certificate failed"); break; } certCtx = CertCreateCertificateContext(X509_ASN_ENCODING, derBuf, derLen); if (certCtx == NULL) { LOG_ERROR("creating certificate context failed"); break; } /* Next fetch the relevant cert chain from the store */ CERT_ENHKEY_USAGE enhkeyUsage = { 0 }; CERT_USAGE_MATCH certUsage = { 0 }; CERT_CHAIN_PARA chainParams = { sizeof(CERT_CHAIN_PARA) }; LPSTR usages[] = { szOID_PKIX_KP_SERVER_AUTH, szOID_SERVER_GATED_CRYPTO, szOID_SGC_NETSCAPE }; enhkeyUsage.cUsageIdentifier = 3; enhkeyUsage.rgpszUsageIdentifier = usages; certUsage.dwType = USAGE_MATCH_TYPE_OR; certUsage.Usage = enhkeyUsage; chainParams.RequestedUsage = certUsage; DWORD chainFlags = CERT_CHAIN_CACHE_END_CERT|CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT; if (!CertGetCertificateChain(NULL, certCtx, NULL, certCtx->hCertStore, &chainParams, chainFlags, NULL, &certChainCtx)) { LOG_ERROR("getting certificate chain failed"); break; } if (certChainCtx) { LOG_INFO("cert chain context error status:%08x,info status:%08x", certChainCtx->TrustStatus.dwErrorStatus, certChainCtx->TrustStatus.dwInfoStatus); } /* Then verify it against a policy */ auto certName = X509_get_subject_name(cert); auto index = X509_NAME_get_index_by_NID(certName, NID_commonName, -1); if (index < 0) { LOG_ERROR("unable to locate certificate CN"); break; } ASN1_STRING_to_UTF8(&certNameUtf8, X509_NAME_ENTRY_get_data(X509_NAME_get_entry(certName, index))); std::wstring serverName; if (!StrUtils::utf8ToUnicode(serverName, (char*)(certNameUtf8))) { LOG_ERROR("unable to convert cert name to wide character string"); break; } SSL_EXTRA_CERT_CHAIN_POLICY_PARA sslPolicyParams = { sizeof(SSL_EXTRA_CERT_CHAIN_POLICY_PARA) }; CERT_CHAIN_POLICY_PARA chainPolicyParams = { sizeof(CERT_CHAIN_POLICY_PARA) }; CERT_CHAIN_POLICY_STATUS chainPolicyStatus = { sizeof(CERT_CHAIN_POLICY_STATUS) }; sslPolicyParams.dwAuthType = AUTHTYPE_SERVER; sslPolicyParams.pwszServerName =const_cast<wchar_t*>(serverName.c_str()); sslPolicyParams.fdwChecks =0x00001000; // SECURITY_FLAG_IGNORE_CERT_CN_INVALID chainPolicyParams.pvExtraPolicyPara = &sslPolicyParams; chainPolicyParams.dwFlags = CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS; auto verifyResult = CertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_SSL, certChainCtx, &chainPolicyParams, &chainPolicyStatus); if (verifyResult && chainPolicyStatus.dwError == ERROR_SUCCESS) { ret = TRUE; } else { if (verifyResult) { LOG_ERROR("check cert chain policy failed with errorcode:%08x", chainPolicyStatus.dwError); } else { LOG_ERROR("unable check cert chain policy"); } } } while (false); if (derBuf) { OPENSSL_free(derBuf); } if (certNameUtf8) { OPENSSL_free(certNameUtf8); } if (certCtx) { CertFreeCertificateContext(certCtx); } if (certChainCtx) { CertFreeCertificateChain(certChainCtx); } return ret; }
重新运行发现,CertGetCertificateChain会阻塞30秒然后返回错误码0x01010040,即CERT_TRUST_REVOCATION_STATUS_UNKNOWN|CERT_TRUST_IS_OFFLINE_REVOCATION|CERT_TRUST_IS_PARTIAL_CHAIN,前面两个flag是证书吊销信息可以不管,最后一个flag的意思是证书链未完成;启用CAPI2日志重新运行,发现很多错误,原来是从网络获取CTL(证书信任列表)以及根证书时超时了。
为什么要从网络获取CTL以及根证书呢,运行certmgr.msc可以发现新装的Win7根证书很少,当遇到系统没有的根证书时就需要查询证书信任列表以及下载根证书。但是手动在浏览器上下载CTL和根证书发现一点也不慢,很正常。调用CertGetCertificateChain时抓取程序dump,发现程序阻塞在了WinHttpGetProxyForUrl,原来crypt接口使用winhttp来获取CTL和根证书,在发起请求前会使用WinHttpGetProxyForUrl获取代理信息。
WinHttpGetProxyForUrl为什么会一直阻塞呢,使用IDA分析发现,WinHttpGetProxyForUrl内部会使用RPC调用WPAD服务查询代理信息,然后调用WaitForMultipleObjects等待返回,所以归根到底是WPAD服务阻塞了。Win7默认开启了WPAD(WinHTTP Web Proxy Auto-Discovery Service),该服务可以让程序自动发现代理服务器,WPAD 可以借助 DNS 服务器或 DHCP 服务器来查询代理自动配置(PAC)文件的位置。关闭掉Internet选项-连接-局域网设置-自动检测设置或者禁用WPAD服务后重新运行,发现正常了。
为什么WPAD服务会阻塞呢,调用CertGetCertificateChain时抓取WPAD服务dump,发现WPAD会调用gethostname获取本地主机名,然后调用getaddrinfo解析,最终阻塞在了Nbt_ResolveName。
查阅资料发现解析本地主机名超时和netbios以及dhcp有关系,虚拟机下的Windows本地连接会生成一个“连接特定的DNS后缀”localdomain,生成手动填写本地连接ip地址也正常了。
-
为windows远程桌面加上SSL证书认证整理.pdf
2021-11-07 21:00:52为windows远程桌面加上SSL证书认证整理.pdf -
系统更新程序,解决安装win7 64位系统安装驱动不正常(错误提示,windows无法验证此文件的数字证书)
2017-09-15 11:24:10解决使用drivermonitor.exe加载驱动文件时提示:windows无法验证此文件的数字证书等问题解决使用drivermonitor.exe加载驱动文件时提示:windows无法验证此文件的数字证书等问题 -
Windows server 2008R2 CA证书服务器替换文件
2020-04-16 17:39:322000和2003版本不需要替换,那为什么还要用2008?低版本都停止更新了相对来说不安全。2008替换此文件,就能出现通过使用智能卡证书注册站来为另一用户申请一个智能卡证书啦。 -
windows和linux下自制证书进行验证测试
2018-02-01 09:37:54使用openssl工具在Windows和Linux下自制证书一致 创建ca、server、client三个文件夹存放制作好的证书 -
解决windows xp因为ssl证书问题无法上网的补丁
2019-04-05 01:40:35解决windows xp因为ssl证书问题无法上网的补丁 -
windows apache环境下部署SSL证书让网站支持https的配置方法
2021-01-09 00:08:58关于SSL证书的用处就不讲啦,需要部署的朋友应该已经了解过了,直接进入正题 安装Apache, 下载安装Apache时请下载带有SSL版本的Apache安装程序. 第一步当然是获取证书啦 我是在腾讯云上申请的,很快几分钟就搞定了... -
Windows新建域时本地administrator账户密码不符合具体解决方案
2020-10-01 09:50:51在Window Server 2012中新建域时,碰到“无法新建域,因为本地administrator账户密码不符合要求” 的问题,具体解决方法如下,有类似问题的朋友可以参考下哈 -
WinCryptSSHAgent:在Windows上无缝使用Yubikey进行SSH身份验证
2021-02-06 01:40:29受益于Windows证书管理,该项目本机支持使用Windows用户证书或智能卡(例如Yubikey PIV)进行身份验证。 总览 特征 本机使用智能卡,而无需在Windows中安装任何驱动程序(仅PIV) 支持OpenSSH证书(因此您可以将... -
如何解决“证书无效,不能用于验证本网站的身份”错误?
2021-03-06 16:19:42问题是,如何解决“证书无效并且不能用于验证本网站身份”的错误?。如何解决“证书无效,不能用于验证本网站的身份”错误?下面是详细信息:我有一个签名的小已经工作正常,直到我更新Java来8u25(1.8.0_25-B18)。... -
Windows Server 做CA给Centos 颁发证书
2021-11-26 13:55:22需要一个全新的环境 ...Windows不加域,直接安装ad域证书,全都默认安装就可以了 没有加域,所以是独立根 Windows导出证书 cmd打开mmc控制平台 ctrl+m 打开添加管理单元,把证... -
Windows Server 2016 企业CA证书的应用
2021-02-28 19:50:46提前部署好AD域控环境,以下直接从搭建证书服务器开始 点击添加功能和角色 找到如下服务勾选即可 角色服务选择如下功能即可 然后等待安装即可 安装完成以后点击黄色感叹号哪里进入如下界面进行配置 设置类型为... -
[系统安全] 二十二.PE数字签名之(下)微软证书漏洞CVE-2020-0601复现及Windows验证机制分析
2021-02-16 23:51:09这篇文章将详细介绍微软证书漏洞CVE-2020-0601,并讲解ECC算法、Windows验证机制,复现可执行文件签名证书的例子。 这些基础性知识不仅和系统安全相关,同样与我们身边常用的软件、文档、操作系统紧密联系,希望这些... -
Windows Server 2008 R2 下配置证书服务器和HTTPS方式访问网站.pdf
2019-06-11 11:50:32数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个... -
windows 驱动验证数字证书
2016-01-12 16:12:22Kernel mode display-only miniport driver (KMDOD) sample Installation In Microsoft Visual Studio, press F5 to build the sample and then deploy it to a target machine. For more info, see ... -
Windows证书管理
2020-06-28 17:08:56windows里提供了数字证书管理工具,用于管理我们电脑里安装的各种数字证书,首先数字证书是一种电子文件,那么它有一定的格式,也有拓展名。 证书扩展名 Windows中的证书扩展名有好几种,比如.cer和.crt。通常而言... -
Windows7安装.net framework4.6提示“根据当前系统时钟或签名文件中的时间戳验证时要求的证书不在有效期内...
2022-04-07 13:50:52根据当前系统时钟或签名文件中的时间戳验证时要求的证书不在有效期内 修改日期为2019仍然无效(虚拟机里操作的,不知道跟这个有没有关系),下载离线安装包顺利装上。 .NET Framework 4.6.2 脱机安装程序Windows .... -
Windows10家庭版 解决IIS 万维网安全中没有Windows身份验证
2020-09-28 09:18:32Windows家庭版 解决IIS 万维网安全中没有windows身份验证(Windows Authentication) 打开启动或关闭Windows功能,IIS菜单下万维网服务的安全性缺少Windows身份验证 解决方法 1.打开 C:\Windows\servicing\Packages... -
远程桌面无法连接–验证证书过期或无效的一个有效解决办法
2021-07-05 02:09:30问题:远程桌面无法连接到远程计算机,因为从远程计算机接收的身份验证证书已过期或无效。在某些情况下,客户端和服务器计算机之间的较大时间差异也可能会导致此错误。解决办法:1、登录服务器使... -
打开outlook提示"…无法验证的安全证书……
2021-07-30 05:27:56各位同胞,最近遇到一个棘手的问题,每次打开outlook均会提示以下信息:==============================================您连接到的服务器正在使用一个无法验证的安全证书。已处理证书链,但是在不受信任提供程序... -
Windows下用OpenSSL生成CA根证书及签发server端证书
2021-08-14 10:11:09CAcreateserial -in private/server.csr -out certs/server.crt -extfile private/server.dns.ext 由于Chrome浏览器加载证书时要读取扩展信息验证域名或者IP,如果没有这个信息,则会发生Chrome不能识别证书通用名称... -
windows 域控+证书服务器+IAS+Cisco AP
2011-04-01 18:11:57windows域控+证书服务器+IAS+Cisco AP 做radius认证 使无线用户使用证书通过Cisco AP经过证书认证与网络连接,非常好用,经过本人新自验证,windows 2003 域控,证书服务器+cisco 1242AP,用intel和dell无线网卡做过... -
windows安装证书后无法信任问题解决
2020-12-02 11:04:16问题场景:使用whistle抓取https的数据包时,需要安装rootCA证书,安装完成之后,发现无法访问https的请求,经查询发现,rootCA证书没有安装到【受信任的根证书颁发机构】下面。 解决方案: win+R之后,键入mmc,... -
KB3004394 win8-x86(紧急的受信任的根更新 Windows Windows 中的根证书程序的支持)
2022-02-11 13:21:15来自文章:visual studio卡在正在下载/正在验证进度条(不进行安装)中的资源