使用Node的加密库创建自签名证书?

时间:2015-07-25 07:35:48

标签: javascript node.js cryptography ssl-certificate

纯JavaScript(没有openssl二进制文件)是否可以使用Node的加密库来生成自签名证书?这是我使用openssl生成证书的脚本:

#!/bin/bash
FQDN="*"

# Create a private key
openssl genrsa \
    -out server-key.pem \
    2048

# Create a certificate signing request
openssl req \
    -new \
    -key server-key.pem \
    -out certificate-signing-request.csr \
    -subj "/C=US/ST=StateL=City/O=Full Name/CN=${FQDN}"

# Sign the certificate signing request to create the server certificate
openssl x509 \
    -req -in certificate-signing-request.csr \
    -signkey server-key.pem \
    -out server-certificate.pem \
    -days 36159

我很好奇是否可以使用JavaScript以及此处提供的类和方法来完成:

https://nodejs.org/api/crypto.html

如果是这样,上面创建文件的代码是什么样的?

2 个答案:

答案 0 :(得分:9)

您不能使用Node的components生成证书,从他们的API文档中没有任何创建证书的功能(他们建议使用openSSL)。您当然可以签署证书,但这需要外部行动。

你能做什么,如果你想要一个能在JS中完成所有这一切的解决方案(正如@robertklep所建议的那样),那就是在Forge这样的JavaScript中使用本机实现。

在此代码示例中,您可以创建证书,对其进行自签名并以PEM格式导出。 Forge拥有您需要的一切,因此crypto 不是必需的

crypto

由于所需的代码量相对较少,因此该过程非常简单。 forge readme列出了所有其他选项,例如为属性和扩展提供 csr ,而不是在代码中全部执行。

答案 1 :(得分:1)

答案是"是"和"不"。 CryptoJS没有公开用于编码证书的ASN.1 / DER库。它只暴露加密例程。因此,您可以执行自签名,但如果不在侧面实现ASN.1 / DER库,则无法生成输入数据。

所以最后CryptoJS只暴露了创建证书所需的非常有限的功能。另一方面,这可能是您需要的所有加密技术。尽管ASN.1 / DER编码只是一种数据格式,但它是一种非常复杂的数据格式,您必须具备相当多的知识才能启动并运行ASN.1 / DER库。 ASN.1 / DER生成比解析更容易。

不过,我倾向于说不,而不是肯定。