Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Node';创建自签名证书的加密库?_Javascript_Node.js_Cryptography_Ssl Certificate - Fatal编程技术网

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

Javascript 使用Node';创建自签名证书的加密库?,javascript,node.js,cryptography,ssl-certificate,Javascript,Node.js,Cryptography,Ssl Certificate,在纯JavaScript(无openssl二进制)中,是否可以使用节点的加密库生成自签名证书?下面是我使用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

在纯JavaScript(无openssl二进制)中,是否可以使用节点的加密库生成自签名证书?下面是我使用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以及此处可用的类和方法来完成这一切:


如果是这样,创建上述文件的代码看起来会是什么样子?

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

如果您想要一个在JS中完成所有工作的解决方案(正如@robertklep所建议的),那么您可以做的是使用类似JavaScript的本机实现

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


该过程非常严格,所需的代码量相对较低。该列表列出了所有其他选项,例如为属性和扩展提供csr,而不是在代码中完成所有操作。

请查看,它使用了UndertheHood。在2020年,类似这样的东西是否仍然适用?我想知道Forge提供的使这成为可能的东西是否包括加密模块中没有的硬代码加密东西,或者您是否可以使用加密模块获得密钥对和签名,并自己实现PEM序列化。
var forge = require('node-forge');
var pki = forge.pki;

// generate a keypair or use one you have already
var keys = pki.rsa.generateKeyPair(2048);

// create a new certificate
var cert = pki.createCertificate();

// fill the required fields
cert.publicKey = keys.publicKey;
cert.serialNumber = '01';
cert.validity.notBefore = new Date();
cert.validity.notAfter = new Date();
cert.validity.notAfter.setFullYear(cert.validity.notBefore.getFullYear() + 1);

// use your own attributes here, or supply a csr (check the docs)
var attrs = [{
  name: 'commonName',
  value: 'example.org'
}, {
  name: 'countryName',
  value: 'US'
}, {
  shortName: 'ST',
  value: 'Virginia'
}, {
  name: 'localityName',
  value: 'Blacksburg'
}, {
  name: 'organizationName',
  value: 'Test'
}, {
  shortName: 'OU',
  value: 'Test'
}];

// here we set subject and issuer as the same one
cert.setSubject(attrs);
cert.setIssuer(attrs);

// the actual certificate signing
cert.sign(keys.privateKey);

// now convert the Forge certificate to PEM format
var pem = pki.certificateToPem(cert);
console.log(pem);