纯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
如果是这样,上面创建文件的代码是什么样的?
答案 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生成比解析更容易。
不过,我倾向于说不,而不是肯定。