在WinRT中是否有SignedCMS的替代品?
,我在将.NET桌面应用程序移植到Windows Store应用程序时遇到了麻烦... 长话短说,我有一个带有加密和签名的XML文件的ZIP文件和其中的证书.解密正在起作用(或多或少),但现在我必须"不符号" XML,我被卡住了. 在.NET应用程序中,Unsigning是使用System.Security.Cryptography.pkcs.signedcms完成的,但是Winrt(一如既往...) 中不存在该类别 Winrt中有其他选择吗? 这是.NET应用中使用的一些代码: public static byte[] CheckAndRemoveSignature(byte[] data, X509Certificate2Collection certStore, out SignedCms out_signature) { SignedCms signedMessage = new SignedCms(); signe
6 2024-01-06
编程技术问答社区
从X509Certificate2导出一个以asn.1符号表示的证书
我目前正在学习使用证书的工作,现在我很好奇,如果可以从X509Certificate2 instance中获取已加载证书的符号. 我找到了Export -Method,并且效果很好,但是我没有看到更改输出格式的编码的可能性 - 仅在der-format中. 是否有可能以ASCII ASN.1证书导出/转换加载证书,类似于以下示例: Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=XY.... ... 还是有一个转换器可以转换为纯文本? 解决方案 我写了一个GTK#工具(在C#中)进行了几年前.完整源代码可从工具/树/主/asn1view 您可能只需要 common/prettyprinter.cs and c
2 2024-01-06
编程技术问答社区
将ASN.1数据转换为公钥需要什么? 例如,如何确定OID?
此代码与 dkim签名验证用于抗Spam努力./p> 我有一个s1024._domainkey.yahoo.com的byte[] s1024._domainkey.yahoo.com是ASN.1编码,但我不知道单独的信息是否包含足够的信息来实现公共密钥. 基于,看来我可以将ASN.1密钥转换为X509Certificate公钥,但是我需要提供一个OID和一些ASN.1编码的参数. 在此示例中,我的元数据是ASN1密钥是: RSA编码的键(ASN.1 der-der-der-der-der-der-x660-1997] rsapublickey per rfc3447) 与任何一个SHA1 SHA256哈希算法一起使用 使用与RFC3447 A.2节的下表有关的OID(尽管我不知道如何将此信息转换为完整的OID) /* * 1.2.840.113549.1 * MD2 md2WithRSAEncryption ::= {pkcs-1 2}
4 2023-12-15
编程技术问答社区
X.509v3 ASN.1转C数据结构
我正在尝试为代理证书创建X509请求(ProxyCertInfo扩展)在C(openSSL)中,但我无法弄清楚如何定义ProxyCertInfo的数据架构. RFC定义ASN.1语言如下: PKIXproxy88 { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) proxy-cert-extns(25) } DEFINITIONS EXPLICIT TAGS ::= BEGIN -- EXPORTS ALL -- -- IMPORTS NONE -- -- PKIX specific OIDs id-pkix OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) dod(6) internet(1) securit
2 2023-12-15
编程技术问答社区
是否有ASN.1 X.509 V3证书的规范
我正在X.509 V3证书上工作,并想知道它们的确切结构.是否有ASN.1可以使用某处的规范? RFC文档似乎只有指定了一部分... 解决方案 X.509 V3在RFC 2459中定义,RFC 3280和RFC 5280中的增强. 每个RFC中的每个RFC都有一个ASN.1节: 附录-A 附录-A 附录-A X.509确实由ITU管理,因此 https://www.itu.int/rec/dologin_pub.asp?lang=e&id=t-rect = t-rec-x.509-201210-s!pdf-e&type =项目是最权威的(请参阅ASN.1的附件A和附件J,第7章和第8章).该文档的最新版本需要付款,但2012年版(链接)是免费的.
2 2023-12-15
编程技术问答社区
X.509证书中的识别名称长度限制
在 x509证书的dn ,如oid" 2.5.4.3"中的asn.1表示法,极限最多为64个字符.如果我们想拥有超过64个字符的通用名称,是否有周转? 解决方案 即使您可以将证书生成代码哄骗,也需要更长的CN,也需要更改的 clister ,大多数您无法控制.客户很可能会拒绝使用太长的CN证书,然后您根本没有证书. 如注释中所述,您可以(并且应该)将其和其他域名放入主题替代名称扩展名中,然后将CN留为空.不是整个"主题",而只是其中的CN部分. 其他解决方案 如果您想像@chris Cogdon一样" cajole"证书生成代码,这不是很难.我需要作为反向工程挑战的一部分进行此操作,因此符合标准的事实无关紧要.我完全同意您不应该这样做的信息,但是我仍然会解释一下我的做法,因为花了一些时间才弄清楚. 这是(粗糙的)步骤: 从 https://ftp.openbsd.org/pub/下载libressl的最新来源OpenBSD/libressl/(我使用了2
0 2023-12-15
编程技术问答社区
用OpenSSL对ASN.1 DER OCTET STRING进行解码
使用OpenSSL API,我从X.509V3证书中提取了一个自定义扩展名: X509_EXTENSION* ex = X509_get_ext(x509, 4); x509_extension对象包含一个值(ex->值),该值是ASN.1 Octet字符串. Octet字符串包含一个编码的UTF-8字符串.我正在尝试解码八位位字符串以获取普通的UTF-8字符串. 我尝试了一些事情,例如: ASN1_STRING_to_UTF8(&buf, ex->value); 和 M_ASN1_OCTET_STRING_print(bio, ex->value); int len = BIO_read(bio, buf, buf_size); buf[len] = '\0'; 这些都给我DER编码的字符串.我如何获得普通的UTF-8字符串? 解决方案 @francois将我指向asn1_get_object()函数.该功能适用​​于证书扩展名仅包含单个值的
12 2023-12-15
编程技术问答社区
X.509 证书中的 "通用名称 "属性允许使用哪些字符串?
在x509证书的DN的通用名中 在asn.1中定义的oid" 2.5.4.3"中的符号,什么是允许的值? 我知道极限最多是64个字符,但是所有字符是否允许?数字? 例如.是否允许.? IP地址(x.x.x.x)是根据ASN定义的有效序列吗? 允许域名吗? 解决方案 杰出名称中的通用名称属性被编码为: X520CommonName ::= CHOICE { teletexString TeletexString (SIZE (1..ub-common-name)), printableString PrintableString (SIZE (1..ub-common-name)), universalString UniversalString (SIZE (1..ub-common-name)), utf8String UTF8String (SIZE (1..ub-co
0 2023-12-15
编程技术问答社区
证书主体X.509
根据X.509,证书具有属性主题. C=US, ST=Maryland, L=Pasadena, O=Brent Baccala, OU=FreeSoft, CN=www.freesoft.org/emailAddress=baccala@freesoft.org 这是典型的主题值.问题是这些属性的类型(或标签)是什么(c,st,l,o,o,o,cn),它们的格式是什么? 解决方案 ietf pkix(最新版本 rfc 5280 )用于证书.从第4.1.2.4节中,必须支持以下字段(我在括号之间添加的是OpenSSL长而可选的简称): 国家(Countryname,C), 组织(组织名称,O), 组织单位(组织Unitname,OU), 杰出名称预选赛(DNQualifier), 州或省名(StateorProvincename,ST), 通用名称(CommonName,CN)和 序列号(序列号). 还有一个应支持的元素列表: 局部性(局部
4 2023-12-15
编程技术问答社区
如何将.crt转换为.pem
如何将.crt转换为.pem? 解决方案 您可以使用 openssl库进行此转换.可以找到Windows二进制文件在这里 安装了库后,您需要发出的命令是: openssl x509 -in mycert.crt -out mycert.pem -outform PEM 其他解决方案 我发现其他OpenSSL答案对我不起作用,但是以下情况确实如此,与来自Windows的CRT文件. openssl x509 -inform DER -in yourdownloaded.crt -out outcert.pem -text
6 2023-12-15
编程技术问答社区
在Nodejs中解析证书撤销列表
我需要解析CRL(PEM格式化)以检查撤销哪些证书.我曾经使用 这个示例,直到我切换到Typescript.现在,我有 import { fromBER } from 'asn1js'; import { CertificateRevocationList } from 'pkijs'; import fs from'fs'; fs.readFile('./pathToMyCrlFile.crl', (err, crlData) => { if (err) { throw err; } const buffer = new Uint8Array(crlData).buffer; const asn1crl = fromBER(buffer); const crl = new CertificateRevocationList({ schema: asn1crl.result }) for (const { userCertifica
4 2023-11-01
编程技术问答社区
使用 SecAsn1Decode 解析 DER 格式数据
我正在尝试使用SecAsn1Decode来解析以下DER编码数据. 但是,我未能定义此结构的模板(由SecAsn1Template表示). 也许任何人都可以解释如何为以下der结构创建模板: 这是二进制原始数据(格式) 30 81 8E 31 0B 30 09 06 03 55 04 06 13 02 49 4C 31 0F 30 0D 06 03 55 04 08 0C 06 69 73 72 61 65 6C 31 0C 30 0A 06 03 55 04 07 0C 03 54 4C 56 31 0B 30 09 06 03 55 04 0A 0C 02 54 53 31 1E 30 1C 06 03 55 04 0B 0C 15 43 41 5F 63 65 72 74 69 66 69 63 61 74 65 5F 73 65 72 76 65 72 31 1B 30 19 06 03 55 04 03 0C 12 61 61 61 61
12 2023-10-25
编程技术问答社区
Apache Thrift、Google Protocol Buffers、MessagePack、ASN.1和Apache Avro之间有什么关键区别?
所有这些都提供了二进制序列化,RPC框架和IDL.我对它们之间的关键差异感兴趣(性能,易用性,编程语言支持). . 如果您知道其他类似的技术,请在答案中提及它. 解决方案 ASN.1 是ISO/ISE标准.它具有非常可读的源语言和各种后端,包括二进制和人类可读.作为国际标准(这是一个旧标准!),源语言有点厨房(大西洋有点湿),但它非常明确,并且具有相当数量的支持. (如果您挖掘足够大的挖掘,您可能可以找到一个姓名的ASN.1库,并且如果没有良好的C语言库,则可以在FFIS中使用.也有一些好的教程. 节俭不是标准.它最初来自Facebook,后来是开源的,目前是Apache的顶级项目.它没有得到充分记录 - 尤其是教程级别 - 在我的(公认的简短)看来,似乎并没有添加其他任何东西,以前的努力还没有做到(在某些情况下更好).公平地说,它有一个相当令人印象深刻的语言,其中包括一些高调的非主流式语言. IDL也模糊地类似C. 协议缓冲区不是标准.这是一种正在向更广泛社区发
14 2023-10-20
编程技术问答社区
我需要一个示例来了解ASN.1中的隐式标记
我已经通过以下教程 /a> 您能帮我理解一个示例的隐式标记吗? 解决方案 在ASN.1标记中,实际上有两个目的:键入和命名.键入意味着它告诉en-/decoder是哪种数据类型(是字符串,整数,布尔值,集合等),命名意味着,如果有相同类型的多个字段,并且某些字段(或全部)都是可选的,它告诉en-/dododer该值是哪个字段. 如果您将ASN.1与JSON进行比较,然后查看以下JSON数据: "Image": { "Width": 800, "Height": 600, "Title": "View from 15th Floor" } 您会注意到,在JSON中,每个字段始终均以明确命名("图像","宽度","高度","标题"),并且明确或隐式键入("标题"是字符串,因为其值被引号包围着,"宽度"是一个整数,因为它没有引号,只有数字,它不是" null"," true"或" false",并且没有小数点). asn.1
14 2023-10-14
编程技术问答社区
ASN1中的[0]和[3]wơrk如何?
我正在解码ASN1(如X.509在HTTPS证书中使用).我做得很好,但是我只是找不到的东西. . 在此另一个示例是我不明白的是,标签字节的前2位是类,下一个原始/构造的位,其余5个应该是标签类型. A0为10100000,这意味着标签类型值将为零. 解决方案 asn.1 ber and der使用asn.1标签可明确识别编码流中的某些组件.有4类ASN.1标签:通用,应用,私有和特定于上下文. [0]是一个特定于上下文的标签,因为它的前面没有标签类kew.通用保留用于ASN.1中的内置类型.通常,您会看到上下文特定标签,以消除包含可选元素的序列中的潜在歧义. 如果您知道自己正在收到两个不是可选的项目,一个接一个,您知道哪个是哪个标签相同.但是,如果第一个是可选的,则两个必须具有不同的标签,或者如果编码中只有一个,则无法分辨出您收到的标签. 今天最常使用的是ASN.1规范使用"自动标签",因此您不必担心消息中的这种歧义,因为序列,设置和选择的组件将自动获得以[0开头的上
8 2023-09-28
编程技术问答社区
ASN1_TIME到time_t的转换
如何将ASN1_TIME转换为time_t格式?我想将X509_get_notAfter()的返回值转换为秒. 解决方案 时间被内部存储为字符串,在格式YYmmddHHMMSS或YYYYmmddHHMMSS上. . 在字符串的末尾,有秒和时区的分数空间,但让我们暂时忽略它,并且有一些(未经测试的)代码. 注意 :另请参见下面的布莱恩·奥尔森(Bryan Olson)的答案,该答案讨论了由于i++的不确定行为.另请参阅Seak的答案,该答案消除了未定义的行为. static time_t ASN1_GetTimeT(ASN1_TIME* time) { struct tm t; const char* str = (const char*) time->data; size_t i = 0; memset(&t, 0, sizeof(t)); if (time->type == V_ASN1_UTCTIME) /* two
24 2023-09-28
编程技术问答社区
解码 Scapy ASN1 编码的 SSL/TLS 证书字段
我使用scapy-ssl_tls库从ServerHello数据包中提取SSL/TLS证书字段. 问题是,我无法找到一种从ASN1编码字段提取值的方法: sign_algo2: sa2_value: not_before: not_after: pubkey_algo: version: sn: sign_algo: pubkey:
16 2023-09-27
编程技术问答社区
红宝石OpenSSL嵌套asn1错误
我已经尝试了有关此处发布的几个问题的建议,但无济于事.我有以下文件:(注意,我即时生成这些文件,它们是丢弃的键) 证书文件: -----BEGIN CERTIFICATE----- MIIE+jCCA+KgAwIBAgIJAMLMeL/HH75vMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD VQQGEwJVUzENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx HjAcBgNVBAoTFU5pY2hvbGFzIFRlcnJ5IGRvdGNvbTEUMBIGA1UECxMLZGV2ZWxv cG1lbnQxFjAUBgNVBAMTDW5pY2hvbGFzdGVycnkxKTAnBgkqhkiG9w0BCQEWGm5p Y2hvbGFzQG5pY2hvbGFzdGVycnkuY29tMB4XDTE0MTIyNTA3MTkxNFoXDTE1MTIy NTA3MTkxNFowga4xCzAJBgNVBAYT
14 2023-09-27
编程技术问答社区
如何从.key和.crt文件中获得.pem文件?
如何从SSL证书创建PEM文件? 这些是我可用的文件: .crt server.csr server.key 解决方案 您的密钥可能已经以PEM格式,但仅以.crt或.key命名. 如果文件的内容以-----BEGIN开头,并且您可以在文本编辑器中读取: 该文件使用base64,该文件以ASCII而不是二进制格式可读.该证书已经以PEM格式.只需将扩展名更改为.pem. 如果文件在二进制中: 对于server.crt,您将使用 openssl x509 -inform DER -outform PEM -in server.crt -out server.crt.pem 对于server.key,使用openssl rsa代替openssl x509. server.key可能是您的私钥,.crt文件是返回,签名的X509证书. 如果这是针对Web服务器的,并且您无法指定加载单独的私有和公钥: 您可能需要加入两个
12 2023-09-27
编程技术问答社区
用套接字将asn1数据从客户端发送到服务器端
我在C客户端中写了此代码以获取一个int号,编码并通过套接字发送 int clientNumber; printf("Enter a number :\n "); scanf("%d",&clientNumber); Message01_t *message1; message1 = calloc(1, sizeof(Message01_t)); message1->number= clientNumber; char buffer[BUFFERSIZE]; size_t bufferLen = sizeof(buffer); der_encode_to_buffer(&asn_DEF_Message01, message1, buffer, bufferLen); xer_fprint(stdout, &asn_DEF_Message01, message1); if( send( to_server_socket, &message1, sizeof( mess
8 2023-09-06
编程技术问答社区