我在PKI.js和WebCrypto API的V1中有一个完整的功能代码,它使用CSR添加主题备用名称(DNS :)。我正在尝试使用V2,但代码没有运行。
版本1的完整功能示例
带CSRhelp的V1示例。此示例不会使用CSR添加主题备用名称。
请下载此邮箱:https://getwww.me/V1-csrhelp-master.zip在文件 csrhelp-master \ app \ src \ csrhelps \ CsrhelpService.js 第516行中,您将找到以下代码:
pkcs10_simpl.attributes.push(new org.pkijs.simpl.ATTRIBUTE({
type: "1.2.840.113549.1.9.14", // pkcs-9-at-extensionRequest
values: [(new org.pkijs.simpl.EXTENSIONS({
extensions_array: [
new org.pkijs.simpl.EXTENSION({
extnID: "2.5.29.14",
critical: false,
extnValue: (new org.pkijs.asn1.OCTETSTRING({
value_hex: result
})).toBER(false)
})
]
})).toSchema()]
}));
我用下面给出的代码替换了上面的代码,行号为480到511(在#region SubjectKeyIdentifier中)。 它工作正常。
var extensions = new org.pkijs.simpl.EXTENSIONS({
extensions_array: [
new org.pkijs.simpl.EXTENSION({
extnID: "2.5.29.14",
critical: false,
extnValue: (new org.pkijs.asn1.OCTETSTRING({ value_hex: result })).toBER(false)
})
]
});
var altNames = new org.pkijs.simpl.GENERAL_NAMES({
names: [
new org.pkijs.simpl.GENERAL_NAME({
NameType: 2,
Name: "domain1.com, DNS:domain2.com, DNS:domain3.com"
})
]
});
extensions.extensions_array.push(new org.pkijs.simpl.EXTENSION({
extnID: "2.5.29.17", // subjectAltName
critical: false,
extnValue: altNames.toSchema().toBER(false)
}));
var attribute = new org.pkijs.simpl.ATTRIBUTE({
type: "1.2.840.113549.1.9.14", // pkcs-9-at-extensionRequest
values: [extensions.toSchema()]
});
pkcs10_simpl.attributes.push(attribute);
版本2
现在我尝试使用V2示例PKCS#10 complex example。请注意,我直接从pkijs.org链接而不是github获取此代码。
请下载此邮箱:https://getwww.me/V2-PKCS10_complex_example.zip在文件 V2 PKCS10_complex_example / PKCS10_complex_example.js 行号16784中,您将找到以下代码:
pkcs10.attributes.push(new Attribute({
type: "1.2.840.113549.1.9.14", // pkcs-9-at-extensionRequest
values: [new Extensions({
extensions: [new Extension({
extnID: "2.5.29.14",
critical: false,
extnValue: new OctetString({ valueHex: result }).toBER(false)
})]
}).toSchema()]
}));
我将上面的代码(在区域SubjectKeyIdentifier中)替换为下面给出的代码,行号为16749到16780.
var extns = new Extensions();
extns.extensions = new Array();
extns.extensions.push(new Extension({
extnID: "2.5.29.14",
critical: false,
extnValue: (new OctetString({ valueHex: result })).toBER(false)
}));
var altNames = new GeneralNames({
names: [
new GeneralName({
NameType: 2,
Name: "domain1.com, DNS:domain2.com, DNS:domain3.com"
})
]
});
extns.extensions.push(new Extension({
extnID: "2.5.29.17", // subjectAltName
critical: false,
extnValue: altNames.toSchema().toBER(false)
}));
var attribute = new Attribute({
type: "1.2.840.113549.1.9.14", // pkcs-9-at-extensionRequest
values: [extns.toSchema()]
});
pkcs10.attributes.push(attribute);
但这还没有运行。我无法找到我做错的地方。请帮忙。
我已将V1和V2示例(已修改)附加为zip:上面给出了链接。
提前致谢。
答案 0 :(得分:1)
经过多年回到这个问题,我终于感觉到足够的唠叨来创造更小的替代品:
他们很多" dumber"因为它们不是实现完整的ASN.1和x.509规范,而是实现对标准密钥和标准CSR很重要的部分。因此,它们最终变得快速,轻便且易于构建。
我也想让它们适应浏览器版本。如果你对我有所误解,我也会做到这一点。它非常简单(主要完成),只是单调乏味,我还没有完成转换。
今天(2018年4月18日)增加了支持SAN的v2的官方示例:
https://github.com/PeculiarVentures/PKI.js/commit/df5ee2acaf1ffafed6cde8b974e9186d3c4cac78
(非常感谢您发布v1编辑 - 我现在正在努力解决这个问题,因为我的目标是使用常规JavaScript)
我在https://coolaj86.com/articles/lets-encrypt-v2-step-by-step/
获得了一个v1示例(基于您的工作)查看Greenlock™for Web Browsers: