openssl3.2 - 检查rsa证书和私钥是否匹配(快速手搓一个工具)

news/2024/5/15 4:29:41/文章来源:https://blog.csdn.net/LostSpeed/article/details/135782511

文章目录

    • openssl3.2 - 检查rsa证书和私钥是否匹配(快速手搓一个工具)
    • 概述
    • 效果
    • 笔记
    • 编程环境
    • 界面控件的设置
    • 增加文件拖拽的类
    • RSA证书和key是否匹配的实现
    • 在程序中加入环境变量
    • 备注
    • 备注
    • END

openssl3.2 - 检查rsa证书和私钥是否匹配(快速手搓一个工具)

概述

在学习openssl官方的/test/certs的脚本实现, 做到第30个脚本实验时, 发现根CA证书和key不匹配.
估计做实验时, 遇到脚本需要的文件, 就随便拷贝一个同名的文件过来, 导致证书和key不是一个脚本产生的, 所以不匹配

就想从前面的实验中, 找出匹配的证书和key来做实验, 肯定有啊.

这事应该openssl编程就能做到. 不过时间紧, 先不用openssl编程来做.
看有没有简单暴力的方法.

在网上找到如下2个openssl命令, 可以输出证书和key的模块信息.

// 打印X509证书的模块信息
openssl x509 -inform PEM -modulus -in ca-cert.pem -noout// 打印rsa私钥的模块信息
openssl rsa -inform PEM -modulus -in ca-key.pem -noout

这2个命令输出的都是文本信息, 如果这2个文本信息相同, 则说明这2个证书和私钥是匹配的
按照这个原理, 手工输入命令, 然后人肉比对. 原始操作就是这样的, 就可以知道一对证书和key是否匹配.

可以重定向为文件(e.g. openssl x509 -inform PEM -modulus -in ca-cert.pem -noout > cert_info.txt)

然后用win10自带的FC.exe 就可以比较2个文件是否相同(e.g. fc file_a file_b), 如果fc返回0, 这2个文件就是相同的.

但是作为研发, 能用程序做的, 绝对不可能用人工操作来折磨自己, 那肯定不能够啊.

用了一个小时, 手搓了一个原始工具来干活.

效果

在这里插入图片描述

笔记

编程环境

vs2019 vc++ MFC + Dialog模板

界面控件的设置

对话框设置为可以接收文件.
2个编辑框(证书和key), 也设置为可以接收文件.

增加文件拖拽的类

从CEdit继承一个类CDropEdit(用类向导很方便), 加入拖拽消息处理(用类向导加入消息处理), 框架代码不用自己写.

#pragma once
#include <afxwin.h>
class CDropEdit :public CEdit
{
public:DECLARE_MESSAGE_MAP()afx_msg void OnDropFiles(HDROP hDropInfo);
};
#include "pch.h"
#include "CDropEdit.h"
BEGIN_MESSAGE_MAP(CDropEdit, CEdit)ON_WM_DROPFILES()
END_MESSAGE_MAP()void CDropEdit::OnDropFiles(HDROP hDropInfo)
{// TODO: 在此添加消息处理程序代码和/或调用默认值// 拖拽实现很多, 可以参考msdn, 我就直接用下面这位同学分享的片段// https://blog.csdn.net/wrl112/article/details/120335725TCHAR szTmp[MAX_PATH * 2];CString strVal;unsigned int nRet = 0, nInx = 0;do {nRet = ::DragQueryFile(hDropInfo, nInx++, szTmp, sizeof(szTmp));if (nRet > 0) {strVal += szTmp;}else {}break;} while (1);::DragFinish(hDropInfo);SetWindowText(strVal);CEdit::OnDropFiles(hDropInfo);
}

RSA证书和key是否匹配的实现

#include <string>std::string my_W2A(std::wstring str)
{USES_CONVERSION;std::string str_rc = W2A(str.c_str());return str_rc;
}void CCertKeyMatchDlg::OnBnClickedButtonMatch()
{// TODO: 在此添加控件通知处理程序代码CString csFileA;CString csFileB;CString csTmp;std::string strFileA;std::string strFileB;char szBuf[10 * 1024];int i_rc = 0;do {this->SetWindowTextW(_T(""));m_EditFileA.GetWindowText(csFileA);m_EditFileB.GetWindowText(csFileB);if ((csFileA.GetLength() <= 0) || (csFileB.GetLength() <= 0)){TRACE(_T("文件名必须都不为空"));break;}strFileA = my_W2A((LPCWSTR)csFileA);strFileB = my_W2A((LPCWSTR)csFileB);/*// 打印X509证书的模块信息openssl x509 -inform PEM -modulus -in ca-cert.pem -noout// 打印rsa私钥的模块信息openssl rsa -inform PEM -modulus -in ca-key.pem -noout*/sprintf(szBuf, "openssl x509 -inform PEM -modulus -in %s -noout > cert_info.txt", strFileA.c_str());i_rc = system(szBuf);_ASSERT(0 == i_rc);sprintf(szBuf, "openssl rsa -inform PEM -modulus -in %s -noout > key_info.txt", strFileB.c_str());i_rc = system(szBuf);_ASSERT(0 == i_rc);i_rc = system("fc cert_info.txt key_info.txt");csTmp.Format(_T("证书和私钥%s"), (0 == i_rc) ? _T("匹配") : _T("不匹配"));this->SetWindowTextW(csTmp);} while (false);}void CCertKeyMatchDlg::OnDropFiles(HDROP hDropInfo)
{// TODO: 在此添加消息处理程序代码和/或调用默认值CDialogEx::OnDropFiles(hDropInfo);
}

在程序中加入环境变量

在对话框初始化时, 加入了openssl的path, 除非必要, 不污染环境变量.

BOOL CCertKeyMatchDlg::OnInitDialog()
{
// ...// TODO: 在此添加额外的初始化代码char* psz_env_buf = new char[1024 * 1024];if (NULL != psz_env_buf){char* psz_env = getenv("path");// ::SetEnvironmentStrings()sprintf(psz_env_buf, "path=%s;%s", "C:\\openssl_3d2\\bin", psz_env);int i_rc = _putenv(psz_env_buf);_ASSERT(0 == i_rc);delete[]psz_env_buf;}return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

加入环境变量后, 调用程序时, 就不用写全路径, 就可以调用openssl.exe了.

备注

感觉自己还挺机智的:P

备注

因为cert和key的pem是成对的, 用everything看一下, 将cert.pem列出来, 然后进入对应目录找一下是否有对应的key.pem, 最好从生成时间早的目录找, 然后用这个工具比对.
很快就找出来了.
在这里插入图片描述

END

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

whale-quant 学习 part3:股票数据获取

股票数据获取 股票数据的基本分类技术面数据基本面数据 股票数据的常见指标介绍技术面数据常见指标基本面数据常见指标 Baostock的基础数据获取其他数据获取平台的介绍参考 股票数据的基本分类 股票数根据信息来源和分析方法的不同&#xff0c;可分为技术面数据和基本面数据 …

CentOS 7安装全解析

目录 一.centos安装1.1 下载镜像文件1.2 安装 二.远程连接&#xff0c;换源2.1 下载并且使用MobaXterm2.2 远程连接2.3 换源 一.centos安装 1.1 下载镜像文件 https://mirrors.aliyun.com/centos/7/isos/x86_64/ 下载即可 1.2 安装 二.远程连接&#xff0c;换源 2.1 下载并…

Linux的例行性工 作(计划任务)

一&#xff1a;单一执行的例行性任务--at&#xff08;一 次性&#xff09; at命令需要安装 启动服务 格式&#xff1a;at -参数 日期时间 参数&#xff1a; 时间格式&#xff1a; 实验&#xff1a;延迟执行ls /root ,并将结果写入到at.txt中 at命令执行过程分析 第一步&am…

【C++语言1】基本语法

前言 &#x1f493;作者简介&#xff1a; 加油&#xff0c;旭杏&#xff0c;目前大二&#xff0c;正在学习C&#xff0c;数据结构等&#x1f440; &#x1f493;作者主页&#xff1a;加油&#xff0c;旭杏的主页&#x1f440; ⏩本文收录在&#xff1a;再识C进阶的专栏&#x1…

VCL界面组件DevExpress VCL v23.2亮点 - 高DPI / SVG支持

DevExpress VCL是Devexpress公司旗下最老牌的用户界面套包&#xff0c;所包含的控件有&#xff1a;数据录入、图表、数据分析、导航、布局等。该控件能帮助您创建优异的用户体验&#xff0c;提供高影响力的业务解决方案&#xff0c;并利用您现有的VCL技能为未来构建下一代应用程…

使用Go进行HTTP性能优化

Go语言&#xff0c;也被称为Golang&#xff0c;是一种高效且强大的编程语言&#xff0c;特别适合构建高性能的Web应用程序。在处理HTTP请求时&#xff0c;通过一些优化技巧&#xff0c;可以显著提高应用程序的性能。以下是一些使用Go进行HTTP性能优化的方法&#xff1a; 并发处…

大学生求职遇到在线测评 需要结合实际做吗

每年毕业季&#xff0c;都有大量的大学生求职&#xff0c;企业在这个时候往往能够收到很多的求职简历&#xff0c;尤其是一些比较好的岗位&#xff0c;原本只是想要招收10个人&#xff0c;但是结果光是简历就收到上千个简历&#xff0c;一个个面试不实际&#xff0c;浪费时间和…

Qt解析含颜色的QString字符串显示到控件

1、需求 开发接收含颜色字符串显示到窗口&#xff0c;可解析字符串颜色配置窗口属性&#xff0c;且分割字符串显示。 mprintf(“xxxxxx”)&#xff1b;打印的xxxxxx含有颜色配置。 2、实现方法 2.1、条件 选用Qt的PlainTextEdit控件显示字符串&#xff0c;配置为只读模式 …

8. UE5 RPG创建UI(上)

UI是显示角色的一部分属性玩家可以直接查看的界面&#xff0c;通过直观的形式在屏幕上显示角色的各种信息。如何使用一种可扩展&#xff0c;可维护的形式来制作&#xff0c;这不得不说到耳熟能详的MVC架构。 MVC&#xff08;Model-View-Controller&#xff09;是一种常见的软件…

PGSQL安装PostGIS扩展模块

一、PostGIS简介 1、PostGIS介绍 PostGIS是一个空间数据库&#xff0c;空间数据库像存储和操作数据库中其他任何对象一样去存储和操作空间对象。 空间数据与数据库关联起来的三个要素&#xff1a;数据类型、索引和函数。 空间数据类型&#xff1a;用于指定图形为点&#xff0…

css实现扫码循环扫描特效

开发过程中总会遇到不常见的需求&#xff0c;移动端扫描图片加个特效&#xff0c;这里记录一下实现场景 <!DOCTYPE html> <html><head><mate charset"UTF-8"/><title>扫描特效</title><style type"text/css">…

android使用相机 intent.resolveActivity returns null

问题 笔者使用java进行android开发&#xff0c;启动相机时 intent.resolveActivity returns null takePictureIntent.resolveActivity(getPackageManager()) null详细问题 笔者使用如下代码启动相机 // 启动相机SuppressLint("LongLogTag")private void dispatc…

缓激肽(Bradykinin) ELISA kit

灵敏可靠的ELISA试剂盒&#xff0c;用于检测血浆、血清和尿液样本中的缓激肽 缓激肽&#xff08;Bradykinin&#xff09;于1949年被发现&#xff0c;由血浆中的球蛋白前体在蛋白酶的作用下生成。它的名字表明它会促使肠道缓慢运动。早在1909年&#xff0c;人们就注意到在尿液中…

[N-130]基于springboot,vue校园社团管理系统

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 系统分前后台&#xff0c;项目采用前后端分离 前端技术&#xff1a;vueelementUI 服务端技术&#xff1a;springbootmybatis-plus 本系…

第一节——单片机概述

1.MCD-51单片机 与8051&#xff08;80C51&#xff09; 兼容的主要产品 ATMEL公司生产的兼容51单片机的具体型号 2.AVR系列单片机 AVR系列是1997年ATMEL公司挪威设计中心的A先生与V先生共同研发出的精简指令集(RISC—Reduced Instruction Set Computer)的高速8位单片机&#xf…

一键拥有你的GPT4

这几天我一直在帮朋友升级ChatGPT&#xff0c;现在已经可以闭眼操作了哈哈&#x1f61d;。我原本以为大家都已经用上GPT4&#xff0c;享受着它带来的巨大帮助时&#xff0c;但结果还挺让我吃惊的&#xff0c;还是有很多人仍苦于如何进行升级。所以就想着写篇教程来教会大家如何…

网络安全---防御保护--子接口小实验

子接口小实验&#xff1a; 环境准备&#xff1a; 防火墙区域配置为trust&#xff1a; PC设置其ip为同一个网段&#xff1a; 此时尝试ping无法ping通的原因是没有打开防火墙允许ping&#xff0c;我们在图形化界面允许ping即可 最终结果&#xff1a; .com域名服务器&#xff1a; …

Redis 笔记二

概览 1.高并发秒杀问题及可能出现的bug 2.秒杀场景JVM级别锁和分布式锁 3.大厂分布式锁Redisson框架 4.从Redisson源码剖析lua解决锁原子性问题 5.从Redisson源码剖析经典锁续命问题 6.Redis主从架构锁失效如何解决 7.Redlock分布式锁高并发下可能存在的问题 8.双十一大促如何将…

电脑加固态硬盘有什么好处

电脑加固态硬盘有很多好处&#xff0c;以下是一些主要的优点&#xff1a; 1. 启动速度更快&#xff1a;固态硬盘&#xff08;SSD&#xff09;的启动速度比传统机械硬盘&#xff08;HDD&#xff09;快得多。这是因为固态硬盘没有旋转部件&#xff0c;而传统硬盘的读写头需要不断…

集简云新增邮件发送功能,适用多种创意场景并提升邮件发送效率

在数字营销中&#xff0c;电子邮件依旧是连接企业与客户的重要桥梁。集简云深知这一点&#xff0c;本周推出为企业通讯打造的内置应用——集简云邮件发送&#xff0c;帮助用户创建充满个性化的交易电子邮件&#xff0c;还能通过HTML自定义代码来实现用户的创意场景。可与近千款…