在 WinCrypt 中使用 CertCreateCertificateContext 时遇到 ASN1 错误标记值

2024-01-27

我在这里做错了什么?创建证书上下文时,我不断收到错误 0x8009310b(满足 ASN1 错误标记值)。我知道我正在测试的证书很好。我使用 DER、Base-64 和 P7B 格式从中间存储中导出它。三种情况都失败。

int _tmain(int argc, _TCHAR* argv[])
{
    const int       MAX_CERT_FILE_SIZE=81920;
    HANDLE          certFileHandle;
    DWORD           certEncodedRead = 0L;
    BYTE            certData[MAX_CERT_FILE_SIZE] = {0};
    PCCERT_CONTEXT  pCertContext = NULL;
    HCERTSTORE      hSystemStore = NULL;
    int             exitCode = 0;

    fprintf(stdout, "Importing X509 certificate file to root store: %s \n\n", argv[0]);

    try {

        // Create a handle to the certificate given in the command line argument
        BeginTask("Creating certificate handle...");
        certFileHandle = CreateFile(argv[0],
            GENERIC_READ,
            0,
            NULL,
            OPEN_EXISTING,
            FILE_ATTRIBUTE_NORMAL,
            NULL);

        if (INVALID_HANDLE_VALUE == certFileHandle){
            throw "Could not create a handle to the specified certificate file.";
        } 

        // Read the certificate file
        NextTask("Reading certificate file into buffer...");
        memset(certData, 0, MAX_CERT_FILE_SIZE);
        BOOL result = ReadFile(certFileHandle,
                certData,
                MAX_CERT_FILE_SIZE,
                &certEncodedRead,
                NULL);
        fprintf(stdout, "Read %d bytes from certificate file...", certEncodedRead);

        if (!result) {
            throw "Could not read the certificate file.";
        } 

        // Create a certificate context from the buffer
        NextTask("Creating certificate context...");
        pCertContext = CertCreateCertificateContext(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, certData, certEncodedRead);

        if (!pCertContext){
            throw "Could not create a certificate context.";    
        }

        // Open the system certificate store
        NextTask("Opening local machine certificate store...");
        hSystemStore = CertOpenSystemStore(NULL, L"CA"); 
        if (!hSystemStore){
            throw "Could not open the local machine certificate store.";        
        }

        // Add certificate context to store
        NextTask("Adding certificate context to store...");     
        //CertAddCertificateContextToStore(hSystemStore, 
        //  pCertContext, 
        //  CERT_STORE_ADD_REPLACE_EXISTING, 
        //  NULL);

    } catch (ERRMSG msg) {
        Result(false);
        HandleError(msg);
        exitCode = 1;
    } 

    // Clean-up all resources
    if (hSystemStore) {
        NextTask("Closing certificate store...");
        Result(CertCloseStore(hSystemStore, 0));
    }
    if (pCertContext) {
        NextTask("Freeing certificate store...");
        Result(CertFreeCertificateContext(pCertContext));
    }
    if (certFileHandle) {
        NextTask("Closing certificate file...");
        Result(CloseHandle(certFileHandle));
    }

    fprintf(stdout, "\n\nProgram complete-exiting with code %x", exitCode);
    return exitCode;
}

[编辑以添加控制台输出]

Importing X509 certificate file to root store: DOD-CA-12.cer

Creating certificate handle...Success.
Reading certificate file into buffer...Read 41472 bytes from certificate file...Success.
Creating certificate context...Failed.
An error occurred while importing the X509 certificate.
Narrative: Could not create a certificate context.
GetLastError reported: 8009310b.
Success.
Closing certificate file...Success.


Program complete-exiting with code 1

谢谢瓦兹克雷格 https://stackoverflow.com/users/1322972/whozcraig谁注意到文件大小了。

这里的问题是基本的 C++ 101,其中作为命令行参数的文件是 args[1] 而不是 args[0]。 exe 基本上是自行加载的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 WinCrypt 中使用 CertCreateCertificateContext 时遇到 ASN1 错误标记值 的相关文章

  • 链接到大地址感知 DLL

    假设我有一个使用 LARGEADDRESSAWARE 链接器标志集构建的 DLL 现在我有一个动态链接到该 DLL 的应用程序 这是否会使我的应用程序具有大型地址意识 如果不是 那么为任何 DLL 设置此标志是否有意义 讨论here htt
  • 在 C++ 程序中多次使用 FindWindows?

    我使用以下代码 C 来获取窗口 另一个应用程序 的句柄并向其中一个按钮发送消息以模拟单击 并且它可以正常工作 BOOL CALLBACK EnumChildProc HWND hwnd LPARAM lParam mdv test list
  • win32 内容已更改,但除非移动窗口,否则不会显示更新

    我的 win32 GUI 内容每秒都会更改 但除非手动移动窗口 否则不会显示更新 我尝试每秒弹出一个消息框来触发窗口刷新 它成功了 因此 这证明我的内容确实发生了变化 但窗口没有更新 我希望刷新窗口而不是每次都弹出消息框 有没有这样的窗口功
  • 从安全角度来看,在 Windows 中使用管道是否被认为是危险的?

    从安全角度来看 在 Windows 中使用管道是否被认为是危险的 管道在 Windows 中并不是一个特殊的安全风险 如果您担心安全性 请确保将管道上的安全描述符设置为适当的 DACL 如果您的使用要求管道开放供任何人连接 那么您必须将传入
  • 为什么 FindWindow 找到了 EnumChildWindows 找不到的窗口?

    我正在寻找一个类名称为 CLIPBRDWNDCLASS 的窗口 它可以在办公应用程序和其他应用程序中找到 如果我使用 FindWindow 或 FindWindowEx 我找到第一个具有此类的 HWND 但我想要all具有该类的窗口 因此我
  • Windows 上的 wchar_t 和 char16_t 是一样的吗?

    我有一个实例std u16string 我可以通过它吗c str 到一个 Win32 API 它期望LPCWSTR 没有任何类型的转换 例如 我可以安全地这样做吗 auto u16s std u16string u Hello SetWin
  • 用于保护网站安全(使用 SSL)时,数字证书如何工作?

    请帮助我了解整个过程是如何进行的 据我了解 Web 浏览器包含 verisign Entrust Comodo 等证书颁发机构 CA 的根证书 但是当用户访问安全页面时到底会发生什么 Web 浏览器是否向 CA 服务器发送请求来验证证书 还
  • 如何使用 node.js 请求模块使用我自己的证书进行 SSL 调用?

    我正在使用 node js 和此请求模块对另一台服务器进行 HTTP 调用 https github com mikeal request https github com mikeal request 效果很好 我现在需要修改此代码以使用
  • 检测反射 DLL 注入

    在过去的几年中 恶意软件 以及一些渗透测试工具 如 Metasploit 的 meterpreter 负载 已经开始使用反射 DLL 注入 PDF http www harmonysecurity com files HS P005 Ref
  • 如何在 WINAPI 中获取 Windows 10 内部版本、修订号?

    我想使用 WINAPI 在 Windows 10 上获取构建版本 当前窗口版本 10 0 19042 685 我尝试使用 WMI 查询来获取它 select Version BuildNumber from Win32 OperatingS
  • 如何正确使用和实例化现有预览处理程序

    我正在尝试使用现有的预览处理程序来显示文件的预览 我编写了一个简单的测试程序 以 1 查找给定文件的预览处理程序的 CLSID 2 实例化预览处理程序 3 通过流或文件初始化它 4 在基本窗口上渲染预览 这有效 或多或少 It works
  • 什么是特权指令?

    我添加了一些可以干净编译的代码 并且刚刚收到此 Windows 错误 MonTel Administrator 2 12 7 MtAdmin exe Application Error The exception Privileged in
  • 使用 CreateRestrictedToken(LUA_TOKEN) 从提升的进程创建低/中进程

    我正在尝试从提升的进程创建中或低完整性进程 我知道还有其他类似的问题 但它们主要关注使用资源管理器或任务计划程序等解决方法 我想坚持使用CreateRestrictedToken CreateProcessAsUser 我认为一定可以以某种
  • 如何捕获正在播放的音频?

    有谁知道如何以编程方式捕获正在播放的声音 即来自声卡的所有声音 而不是麦克风等输入设备 假设您正在谈论 Windows 则基本上可以通过三种方法来实现此目的 首先是打开音频设备的主输出作为录音源 这只有在驱动程序支持时才可能实现 尽管现在大
  • 具有自定义镶边的 WPF 窗口在右侧和底部有不需要的轮廓

    我使用 Microsoft Windows Shell dll 创建了带有自定义镶边的 WPF 窗口 这是代码
  • RSA 私有指数确定

    我的问题是关于 RSA 签名 如果是 RSA 签名 加密 gt y x d mod n 解密 gt x y e mod n x gt 原始消息 y gt 加密消息 n gt 模数 1024 位 e gt 公共指数 d gt 私有指数 我知道
  • 如何使用 C++ 禁用另一个进程中窗口上的关闭按钮?

    我需要从另一个进程禁用窗口上的关闭按钮 我有它的句柄hWnd我尝试这样做 DWORD dwCStyle GetClassLongPtr hWnd GCL STYLE SetClassLongPtr hWnd GCL STYLE dwCSty
  • 资源文件是否编译为 UNICODE 或 ANSI 代码页?

    首先 如果这个问题已经被回答了一百次了 我深表歉意 噢 但我的搜索显然很糟糕 因为我没有运气回答这个基本问题 EXE DLL中的资源是如何存储的 作为 UNICODE UCS 2 Windows 本机内部字符格式 还是使用资源块的代码页作为
  • 调整大小时在窗口中绘图留下未绘制的边框

    我遇到的问题看似微不足道 但我找不到解决的方法 这里是 我有一个窗口 里面有一些图形 为了简单起见 我们假设它是一个实心绿色矩形 填充了窗口的整个客户区域 我希望每次窗口改变大小时都重新绘制这个矩形并填充整个窗口 我最初做的就是这样的 我已
  • 有没有一种方法可以移动文件并能够在中间取消移动?

    我在用着CopyFileEx具有该功能的复制文件 有没有类似的东西可以移动文件 请记住 并非每次移动都很快 移动到不同的驱动器实际上是一个副本 我现在的解决方案是 如果移动到不同的根目录 则复制并删除原始文件 如果移动到相同的根目录 则简单

随机推荐

  • 任意长度的通用位向量类型

    出于与此处描述相同的原因 用户定义的未解释函数 https stackoverflow com questions 7740556 equivalent of define fun in z3 api 我想定义我自己的未解释函数 bvred
  • 如果下拉列表中的选择发生更改,则从工作表中删除数据

    跟进之前回答的问题 Excel VBA 基于一系列下拉列表运行宏 https stackoverflow com questions 40478350 excel vba run a macro based on a range of dr
  • 如何在不知道 setInterval() 和 setTimeOut() ID 的情况下清除它们?

    如果我不知道返回值setInterval or setTimeOut 我还能用吗clearInterveral id or clearTimeOut id 清除它们 Thanks 您可以替换原来的 setTimeout 和 setInter
  • Java - 访问控制允许来源多源域?

    所以我已经阅读了有关此问题的其他线程 但没有找到解决方案 我遇到的问题是因为我设置 access control allow methods true 我无法使用setHeader Access Control Allow Origin 我
  • C++11 成员初始化列表歧义

    由于此环境中的 GNU 标准库实现 我正在努力解决 c 11 符号解析中似乎存在歧义的问题 Arch Linux 4 2 5 1 x86 64 克 5 2 0 铿锵 3 7 0 Example include
  • 无法在 Angular JS 中使用 SmartTable 选择网格项

    我已经使用网格实现了智能表在 Angular JS 中 根据智能表文档 为了选择网格项 我们需要添加st select row row 我也加了这个 但我无法选择网格 实现的应用程序可以在 plunk 中看到 网址如下 任何人都可以帮我使用
  • 从 jQuery 调用 PHP 函数?

    我的网站上有一个 PHP 函数 需要几秒钟才能完成 这会保留整个页面 这是我不想要的 页面加载后是否可以使用 jquery 调用此 PHP 函数并将结果显示在 div 中 还要显示 ajax 加载器图像直到 PHP 函数完成 我一直在查看
  • hubris 无法安装:缺少 C 库:ruby、ruby、ruby

    我拼命尝试安装 Hubris 但每当我运行 cabal install 时安装就会失败 哈比斯链接 https github com mwotton Hubris tree master Haskell https github com m
  • Air for Android:设备警报后黑屏

    我确实有一个问题 而且没什么可继续的 我即将在三星应用商店上发布一个应用程序 使用 Air for Android As3 创建 并且刚刚得到了一份问题列表 在该应用程序经过三星工作人员测试后 才能发布该应用程序 我确实解决了几乎所有问题
  • Map和Reduce之间的主要区别

    我使用了这两种方法 但我对这两种方法的用法感到很困惑 有什么吗map可以做但是reduce不可以 反之亦然 注意 我知道如何使用这两种方法 我想知道这些方法之间的主要区别以及我们何时需要使用 Source http www globalne
  • OpenJDK 11:在 Linux 上获取 ClassNotFound,在 Windows 上运行良好

    我们有一个基于桌面的 swing 应用程序 可以在 Oracle JDK 1 8 上正常运行 迁移到 OpenJDK 11 后 我们遇到了一些未找到的类异常com sun java swing Painter 我们通过生成一个包含一些类的捆
  • 有没有办法在redis中获取客户端IP?

    我进行了网络搜索 但没有找到任何相关内容 我正在集群上运行redis 并且想找出哪台机器正在连接到redis 特别是当没有机器应该连接 但redis仍然说某些机器已连接时 提前致谢 使用 MONITOR 只会显示实际向 Redis 发送流量
  • mysql 小数点四舍五入

    我是 mysql 的新手 需要一些基本的东西 我需要像这样四舍五入小数 21 4758 应该是 21 48 0 2250 应为 0 22 23 0850 应为 23 08 22 9950 应该是 22 99 我尝试了很多事情但没能成功 Th
  • 在Python中处理从源目录到目标目录的一组文件

    Being 全新的在 python 中 我试图对 python 中的一组文件运行命令 该命令需要源文件和目标文件 我实际上使用的是 imagemagickconvert如下例所示 我可以提供源目录和目标目录 但是我不知道如何轻松保留从源目录
  • 为什么允许使用子类的构造函数实例化父类对象?

    考虑以下 public class parent int x parent x 5 public class child extends parent int y child super y 10 public static void ma
  • Android Rss 图片问题

    大家好 我对 Android 开发比较陌生 正在为新闻网站创建 RSS 阅读器 我遇到的问题是我想要获取图像的 rss feed 的网站的类型为 我为 android 上的代码所做的是 2 个类 RssItem 和 RssItem Disp
  • 浏览器选项卡之间的通信

    我有一个 HTML 页面 文件主要 html 使用 JavaScript 在同一域中打开一个新选项卡window open 新标签页 html method 在新选项卡中 用户可以通过单击按钮来结束其活动 此时 我想向开启者窗口发送一条消息
  • php/mysql账户激活

    我的新网站中的所有内容都工作正常 除了我无法让这段代码工作 query mysql query SELECT FROM members WHERE useremail useremail row mysql fetch assoc quer
  • 将二进制编码为音频 python 或 C

    使用C或Python 首选Python 我如何将二进制文件编码为音频 然后通过耳机插孔输出 以及如何使用麦克风插孔的输入将音频解码回二进制 到目前为止我已经学会了如何使用 python 将文本文件转换为二进制文件 这与 RTTY 通信类似
  • 在 WinCrypt 中使用 CertCreateCertificateContext 时遇到 ASN1 错误标记值

    我在这里做错了什么 创建证书上下文时 我不断收到错误 0x8009310b 满足 ASN1 错误标记值 我知道我正在测试的证书很好 我使用 DER Base 64 和 P7B 格式从中间存储中导出它 三种情况都失败 int tmain in