使用CryptoApi将扩展名添加到证书中
Add extension to certificate using CryptoApi
我正在尝试使用CryptoApi向证书请求添加扩展名。这是我使用的代码:
char extensionValue[] = "testValue";
_CRYPTOAPI_BLOB myBlob = {
(DWORD)strlen(extensionValue),
(BYTE*)extensionValue
};
wchar_t pszString[1000];
DWORD dwLength = 1000;
bool checkEncodingToBase64Test = CryptBinaryToStringW(myBlob.pbData, myBlob.cbData, CRYPT_STRING_BASE64, (LPWSTR)pszString, &dwLength);
BSTR bstrValue = pszString;
BSTR bstrName = SysAllocString(L"1.2.643.100.111");
HRESULT checkAddingExtention = pEnroll->addExtensionToRequest(0, bstrName, bstrValue);
要检查请求,我使用https://certlogik.com/decoder/在此处查看此结果时:
Requested Extensions:
X509v3 Extended Key Usage:
TLS Web Client Authentication, E-mail Protection, 1.2.643.2.2.34.6
X509v3 Key Usage:
Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment
1.2.643.100.111:
testValue
SEQUENCE {:
OBJECT IDENTIFIER '1 2 643 100 111'
OCTET STRING 74 65 73 74 56 61 6C 75 65
}
,但我需要获得这种类型的结构:
SEQUENCE {
OBJECT IDENTIFIER '1 2 643 100 111'
OCTET STRING, encapsulates {
UTF8String
'testValue'
}
}
如何实现这一目标?如何将UTF8弦放在扩展中?
尝试这样做
WCHAR *id = L"testValue";
CERT_NAME_VALUE otherNameValue = { CERT_RDN_UTF8_STRING, (DWORD)wcslen(id) * sizeof(wchar_t), (PBYTE)id };
BYTE *buf;
DWORD size = 0;
CryptEncodeObjectEx(PKCS_7_ASN_ENCODING | X509_ASN_ENCODING, X509_ANY_STRING, &otherNameValue, CRYPT_ENCODE_ALLOC_FLAG, NULL, &buf, &size);
CERT_EXTENSION CertExtension[] = { {"1.2.643.100.111", FALSE, size, buf} };
...
LocalFree(buf);
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 从网站复制证书,并使用脚本将其添加到受信任的根证书颁发机构
- 将自签名证书添加到共享对象C 库
- 使用WinCrypt将主题替代名称添加到自签名的证书中
- 使用CryptoApi将扩展名添加到证书中
- 无法使用C 中的OPENSL API添加证书策略扩展
- 使用WCF和gSOAP向服务器和客户端添加证书