- 浏览: 2037205 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (651)
- ACE (35)
- BAT (9)
- C/C++ (116)
- fast-cgi (14)
- COM (27)
- python (59)
- CGI (4)
- C# (2)
- VC (84)
- DataBase (29)
- Linux (96)
- P2P (6)
- PHP (15)
- Web (6)
- Memcached (7)
- IME输入法 (11)
- 设计模式 (2)
- 搜索引擎 (1)
- 个人情感 (4)
- 笔试/面试 (3)
- 一亩三分地 (33)
- 历史 (2)
- 地理 (1)
- 人物 (3)
- 经济 (0)
- 不仅仅是笑哦 (43)
- 小故事大道理 (2)
- http://www.bjdsmyysjk120.com/ (0)
- http://www.bjdsmyy120.com/ (0)
- 它山之石可以攻玉 (15)
- 大学生你关注些什么 (28)
- 数据恢复 (1)
最新评论
-
luokaichuang:
这个规范里还是没有让我明白当浏览器上传文件时,STDIN的消息 ...
FastCGI规范 -
effort_fan:
好文章!学习了,谢谢分享!
com技术简介 -
vcell:
有错误os.walk(strPath)返回的已经是全部的文件和 ...
通过python获取目录的大小 -
feifeigd:
feifeigd 写道注意:文章中的CPP示例第二行 #inc ...
ATL入门:利用ATL编写简单的COM组件 -
feifeigd:
注意:文章中的CPP示例第二行 #include " ...
ATL入门:利用ATL编写简单的COM组件
#include "stdafx.h" #include <Windows.h> #include <Wincrypt.h> #include <iostream> using namespace std; #pragma comment(lib, "crypt32.lib") const char* g_szContainer = "cont_andylin"; const char* g_szIssuserName = "my name is andylin"; const char* g_szSubjectName = "test subject name"; const char* g_szCertFile = "d:/lin-x509.cer"; DWORD MakeCert(); int main() { DWORD dwErr = MakeCert(); if (dwErr != 0) { cout << "Make Cert Failed! Err Code = " << dwErr << endl; } else { cout << "Make Cert Succ!" << endl; } return 0; } DWORD MakeCert() { HCRYPTPROV hProv = NULL; HCRYPTKEY hKey = NULL; BOOL bRet = FALSE; CERT_INFO certInfo = {0}; BYTE abySerial[] = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F"; do { bRet = CryptAcquireContext(&hProv, g_szContainer, MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET); if (!bRet) { bRet = CryptAcquireContext(&hProv, g_szContainer, MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_DELETEKEYSET); bRet = CryptAcquireContext(&hProv, g_szContainer, MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET); if (!bRet) { break; } } bRet = CryptGenKey(hProv, AT_SIGNATURE, CRYPT_EXPORTABLE, &hKey); if (!bRet) { break; } memset(&certInfo, 0, sizeof(certInfo)); //1.version certInfo.dwVersion = 2; //2.SerialNumber certInfo.SerialNumber.cbData = sizeof(abySerial); certInfo.SerialNumber.pbData = abySerial; //3.algorithm certInfo.SignatureAlgorithm.pszObjId = szOID_RSA_SHA1RSA; certInfo.SignatureAlgorithm.Parameters.cbData = 0; //4.Issuer.Encode the Issuer name with ASN.1, reference MSDN source CERT_RDN_ATTR stRdnAttr = { szOID_COMMON_NAME, //the OID CERT_RDN_PRINTABLE_STRING, (DWORD)strlen(g_szIssuserName) + 1, // string length including (LPBYTE)g_szIssuserName }; CERT_RDN stRdn[] = { 1, // number of elements in the CERT_RND's array &stRdnAttr }; CERT_NAME_INFO stNameInfo = { 1, //number of elements in the CERT_RND's array stRdn }; DWORD dwEncode = 0; LPBYTE pbEncode = NULL; bRet = CryptEncodeObjectEx(X509_ASN_ENCODING, X509_NAME, &stNameInfo, 0, NULL, NULL, &dwEncode); if (!bRet) { break; } pbEncode = new BYTE[dwEncode]; if (NULL == pbEncode) { break; } bRet = CryptEncodeObjectEx(X509_ASN_ENCODING, X509_NAME, &stNameInfo, 0, NULL, NULL, &dwEncode); if (!bRet) { break; } certInfo.Issuer.cbData = dwEncode; certInfo.Issuer.pbData = pbEncode; //5.UTCTime .Process the Time of cert. SystemTimeToFileTime SYSTEMTIME tmSys; GetSystemTime(&tmSys); SystemTimeToFileTime(&tmSys, &certInfo.NotBefore); tmSys.wYear += 10; SystemTimeToFileTime(&tmSys, &certInfo.NotAfter); //6. subject stRdnAttr.pszObjId = szOID_COMMON_NAME; stRdnAttr.dwValueType = CERT_RDN_PRINTABLE_STRING; stRdnAttr.Value.cbData = (DWORD)strlen(g_szSubjectName) + 1; stRdnAttr.Value.pbData = (PBYTE)g_szSubjectName; bRet = CryptEncodeObjectEx(X509_ASN_ENCODING, X509_NAME, &stNameInfo, 0, NULL, NULL, &dwEncode); if (!bRet) { break; } pbEncode = new BYTE[dwEncode]; if (NULL == pbEncode) { break; } bRet = CryptEncodeObjectEx(X509_ASN_ENCODING, X509_NAME, &stNameInfo, 0, NULL, NULL, &dwEncode); if (!bRet) { break; } certInfo.Issuer.cbData = dwEncode; certInfo.Issuer.pbData = pbEncode; //7.PublicKey DWORD dwPubKeyLen = 0; PCERT_PUBLIC_KEY_INFO pstKeyInfo = NULL;//reference RACrypt.cpp .Don't know why bRet = CryptExportPublicKeyInfo(hProv, AT_SIGNATURE, X509_ASN_ENCODING, NULL, &dwPubKeyLen); if (!bRet) { break; } pstKeyInfo = (PCERT_PUBLIC_KEY_INFO)malloc(dwPubKeyLen); if (NULL == pstKeyInfo) { break; } bRet = CryptExportPublicKeyInfo(hProv, AT_SIGNATURE, X509_ASN_ENCODING, pstKeyInfo, &dwPubKeyLen); if (!bRet) { break; } certInfo.SubjectPublicKeyInfo = *pstKeyInfo; //extendsion certInfo.cExtension = 0; certInfo.rgExtension = NULL; certInfo.IssuerUniqueId.cbData = 0; certInfo.SubjectUniqueId.cbData = 0; //Make Certificate CRYPT_ALGORITHM_IDENTIFIER algId; BYTE abyData[16] = {0}; abyData[0] = 0x05; abyData[1] = 0x00; algId.pszObjId = szOID_RSA_SHA1RSA; algId.Parameters.cbData = 2; algId.Parameters.pbData = abyData; /*------------------------------------------------------------- CryptSignAndEncodeCertificate The CryptSignAndEncodeCertificate function encodes and signs a certificate, CRL, CTL or certificate request. This function performs the following operations: 1-> Calls CryptEncodeObject using lpszStructType to encode the "to be signed" information. 2-> Calls CryptSignCertificate to sign this encoded information. 3-> Calls CryptEncodeObject again, with lpszStructType set to X509_CERT, to further encode the resulting signed, encoded information. -------------------------------------------------------------*/ // Export As X.509 certificate PBYTE pbyCertOut = NULL; DWORD dwCertLen = 0; bRet = CryptSignAndEncodeCertificate(hProv, AT_SIGNATURE, X509_ASN_ENCODING, X509_CERT_TO_BE_SIGNED, (void*)&certInfo, &algId, NULL, NULL, &dwCertLen); if (!bRet) { break; } pbyCertOut = new BYTE[dwCertLen]; if (NULL == pbyCertOut) { break; } bRet = CryptSignAndEncodeCertificate(hProv, AT_SIGNATURE, X509_ASN_ENCODING, X509_CERT_TO_BE_SIGNED, &certInfo, &algId, NULL, pbyCertOut, &dwCertLen); if (!bRet) { break; } DWORD dwLen = 0; HANDLE hFile = CreateFile(g_szCertFile, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, NULL, NULL); if (INVALID_HANDLE_VALUE == hFile) { break; } bRet = WriteFile(hFile, pbyCertOut, dwCertLen, &dwLen, NULL); CloseHandle(hFile); if (!bRet) { break; } } while (0); if (!bRet) { return GetLastError(); } return 0; }
发表评论
-
__declspec(novtable) 的用法
2010-11-27 14:37 1593__declspec(novtable) 的用法 __d ... -
解决URLDownloadToFile缓存问题的两种方法
2010-09-09 15:18 2926解决URLDownloadToFile缓存问题的两种方法 ... -
修改richedit背景
2010-07-19 22:52 1654RichEditCtrl::SetBackgroundCo ... -
使用ADO封装类的数据库程序开发实例(下)
2010-07-12 15:30 1482使用ADO封装类的数据库 ... -
使用ADO封装类的数据库程序开发实例(上)
2010-07-12 15:28 1221使用ADO封装类的数据库 ... -
VC防止窗口和控件闪烁的方法
2010-07-09 21:16 20331、将Invalidate()替换为Invalidate ... -
防止窗口闪烁地办法
2010-07-09 21:13 1519防止窗口闪烁地办法 也许我们都碰到过这种情况,当你 ... -
使用ADO _ConnectionPtr
2010-07-06 16:04 5273// GetUser.cpp : Defines the ... -
VC用ADO访问数据库全攻略
2010-07-06 15:29 1805VC用ADO访问数据库全 ... -
深入GetMessage和PeekMessage (引自-MSDN技术组)
2010-06-10 16:59 3735深入GetMessage和PeekMessage (引自 ... -
界面编程总结(1)
2010-06-02 13:32 4018原文地址:http://blog.csdn.net/byx ... -
获取信息的有关Windows API
2010-05-27 10:01 3155获取信息的有关Windows API 1.窗口信息 ... -
VC中如何实现窗口的隐藏
2010-05-13 10:08 7879VC中如何实现窗口的隐藏 用MFC做的Dialog ... -
SetConsoleCtrlHandler 处理控制台消息
2010-05-07 17:32 18175SetConsoleCtrlHandler 处理控制台消 ... -
解决决错误: error C2850: 'PCH header file'
2010-04-27 19:45 1960解决决错误: error C2850: 'PCH hea ... -
VC++ GDI+编程的字体和文本绘制
2010-04-13 13:12 7990字体是文字显示和打印的外观形式,它包括了文字的字样、风格和尺寸 ... -
VC利用GDI+显示透明的PNG图片
2010-04-12 16:59 115581.在你将要使用GDI+的工程中,完成初始化 ... -
GDI+编程基础(一)GDI+ Vs GDI
2010-04-12 15:59 2342下载源代码一、GDI GDI是位于应用程序与不同硬件之间 ... -
VC画图
2010-04-12 15:50 1548BOOL DrawPic(HDC hdc, TCHAR* ... -
对话框的数据交换--MFC深入浅出
2010-04-12 10:43 2469对话框数据交换指以下两种动作,或者是把内存数据写入对应的控 ...
相关推荐
本文将详细介绍这些关键步骤,并结合提供的两个文档,即“WinForm程序创建证书、签名、安装、发布、自动更新全过程.docx”和“WinForm应用程序发布_安装_更新记录.docx”,给出详细的实践指南。 1. 创建证书: 在...
服务器证书的创建流程类似,首先生成服务器私钥,然后创建证书请求,最后由CA签署证书: ```shell # 生成服务器私钥 openssl genrsa -out server.key 2048 # 创建服务器证书请求 openssl req -new -key server.key...
选择“证书助理”(Certificate Assistant),然后选择“创建证书”(Create a Certificate)。 - 创建证书时,应选择“公钥加密”(Code Signing)作为证书类型。在“证书名称”(Common Name)字段中输入“iPhone...
真机测试、连调添加设备更新描述文件、创建证书 本文档主要为开发人员提供了真机测试、连调添加设备更新描述文件、创建证书的详细步骤。以下是相关知识点的总结: 1. 添加设备更新描述文件 添加设备的目的就是...
`创建证书.csproj`是项目文件,记录了项目配置、引用和其他元数据。`Main.resx`用于存储窗体资源,如控件布局和文本。`bin`和`obj`目录分别用于存放编译后的可执行文件和中间编译产物。 在创建证书的过程中,我们...
**EJBCA创建证书图解** EJBCA是一个开源的企业级PKI(Public Key Infrastructure)系统,用于管理和分发数字证书。它基于Java开发,遵循X.509标准,提供了强大的证书颁发机构(CA)功能。在这个图解教程中,我们将...
**WCF创建证书参数**是Windows Communication Foundation (WCF) 中用于设置安全通信的重要环节,主要涉及X.509证书的生成。X.509证书是一种国际标准,用于在电子通信中验证身份,通常用于加密、数字签名以及SSL/TLS...
### key创建证书指令 在IT安全领域中,证书是一种用于证明身份的重要工具,尤其是在网络通信过程中,证书可以确保数据的安全性和完整性。Java平台提供了一种名为`keytool`的命令行工具来帮助用户管理和操作证书、...
在IT行业中,自动化是提升效率的关键,特别是在重复性工作如创建证书方面。"自动化创建证书.zip"这个压缩包文件提供了一种使用Python脚本和Shell脚本来自动化创建Android应用签名证书的方法,这对于开发者来说是非常...
### 创建证书签名的相关知识点 #### 一、概述 在软件开发和部署过程中,为了提高安全性、可信度以及减少被浏览器等安全系统拦截的概率,开发者通常会采用数字证书为自己的应用程序或组件(例如OCX、DLL、EXE等)...
在Exchange服务器的日常管理中,创建证书服务器是一个关键步骤,特别是在确保通信安全和提供身份验证服务方面。Exchange很多服务,如Outlook Anywhere、Exchange ActiveSync、SMTP等,都依赖于数字证书来加密数据和...
**OpenSSL创建证书** 1. **安装OpenSSL**:虽然在描述中提到无需再下载和配置OpenSSL环境,但在实际操作中,你需要先下载适用于Windows的OpenSSL版本并安装。可以从官方网站或者其他可信源获取安装包。 2. **生成...
1. **创建证书**:证书是数字身份的证明,用于确认软件的开发者身份和确保代码未被篡改。在Windows中,可以使用“Microsoft Visual Studio”或“MakeCert”工具来创建自签名证书。自签名证书虽然不是由权威的证书...
在右边的操作中找到创建证书申请或者右键选择创建证书申请。然后,输入 web 站点名称和组织单位等其他信息,选择加密程序, 一般为微软 RSA。选择存放的文件, 일반적으로保存为 TXT 文件,待会需要打开该 TXT 文件...
2. 接着,创建证书签名请求(Certificate Signing Request, CSR),使用`openssl req`命令: ``` openssl req -new -key server.key -out server.csr ``` 提供必要的信息,如组织名、地理位置等,生成CSR文件。 ...
C#是一种广泛使用的编程语言,它提供了丰富的库和工具来处理各种安全任务,包括创建和使用签名证书。本篇将详细介绍C#中如何创建签名证书,以及如何利用RSA算法进行加密解密,并结合Pkcs7标准进行数据封装。 首先,...
iOS创建证书和配置文件
创建证书请求 进入服务器证书配置页面,并选择“创建证书申请”,填写相关信息,点击“下一步”。 选择加密服务提供程序,并设置证书密钥长度,EV证书需选择位长2048,点击“下一步”。 保存证书请求文件到.txt...
本文将深入探讨"创建证书工具"这一主题,并结合标签"CeleSign_1"进行解析。 CeleSign_1可能是一款特定的证书创建工具,其主要功能可能包括生成SSL/TLS证书、代码签名证书以及个人或企业身份认证证书等。CELESIGN....