1

我在 PKI.js 和 WebCrypto API 的 V1 中有一个完整的功能代码,它添加了带有 CSR 的主题备用名称 (DNS:)。我正在尝试使用 V2,但代码没有运行。

版本 1 的完整功能示例

带有CSRhelp的 V1 示例。此示例不使用 CSR 添加主题备用名称。

请下载此 zip: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 复杂示例。请注意,我直接从 pkijs.org 链接而不是 github 获取此代码。

请下载此 zip: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 附加:上面给出了链接。

提前致谢。

4

1 回答 1

2

2019-02-05 更新:替代方案(针对节点)

在多年回到这个问题之后,我终于感觉到足够的唠叨来创建更小的替代方案:

它们非常“笨拙”,因为它们没有实现完整的 ASN.1 和 x.509 规范,而是只实现了对标准密钥和标准 CSR 很重要的部分。因此,它们最终变得快速、轻量且易于构建。

我也一直想让它们适应浏览器版本。如果你打扰我,我也会完成的。这很简单(而且大部分都完成了),只是太乏味了,我还没有完成转换。

v2 示例

今天(2018 年 4 月 18 日)添加了支持 SAN 的 v2 的官方示例:

https://github.com/PeculiarVentures/PKI.js/commit/df5ee2acaf1ffafed6cde8b974e9186d3c4cac78

(非常感谢您发布您的 v1 编辑 - 我现在正在解决这个问题,因为我的目标是使用常规 JavaScript)

v1.3.33 示例

我在https://coolaj86.com/articles/lets-encrypt-v2-step-by-step/有一个 v1 示例(基于您的工作)

在线演示

查看适用于 Web 浏览器的 Greenlock™:

于 2018-04-18T09:44:55.663 回答