我正在涉足Node JS。我有一个要求,即Node JS(使用'request'模块)必须通过HTTPS调用Java REST API。
正如给定的URL中所解释的,我创建了一个CA文件(ca.key,ca.pem),服务器的证书(server1.key,server1.pem)&客户端(client1.key,client1.pem),我能够在两个Node JS应用程序(服务器和客户端)之间进行通信。
现在我想从我的Node JS客户端访问在Apache Tomcat上运行的JAVA REST API。那么现在我如何导入我的Node JS服务器密钥(server1.key,server1.pem)& ca.pem到Tomcat Keystore?我可以直接包含这些server1.key,server1.pem& ca.pem进入Tomcat还是我必须将它们转换为.p12或.jks并导入它们?
答案 0 :(得分:2)
以下是我通过HTTPS使用自签名证书对NodeJS进行Tomcat通信的方法。我在网上看到很多解决方案,比如process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
要么
rejectUnauthorized/strictSSL as false
但我认为这些可能不是正确测试的有效解决方案。
这也可以消除DEPTH_ZERO_SELF_SIGNED_CERT
NodeJS到Tomcat:
第1步:证书&密钥库生成(步骤1到4使用openssl)
创建CA证书,自签名
openssl genrsa -des3 -out ca.key 2048
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
//Provide a valid password during certificate generation
修改openssl文件夹中的openssl.cfg/openssl.cnf
文件,如下所示(通常可以在openssl / bin文件夹中找到)。 (这是为了在证书中添加主机名/ IP地址到
)‘subjectAltName’
a)确保分配'v3_req'并且未注释
‘subjectAltName’
b)然后在'v3_req'下附加主机名,如下所示:
req_extensions = v3_req
创建服务器密钥,csr和&用我们的CA签名
subjectAltName = @alt_names
[alt_names]
DNS.1 =
<hostname of Tomcat server>
IP.1 = <IP address of Tomcat server>
将服务器的证书文件和私钥转换为PKCS#12
<hostname of Tomcat server>
通过'agent'属性在NodeJS的'request'调用中传递'ca.crt':
<IP address of Tomcat server>
将PKCS#12转换为Java密钥库文件(使用java'keytool')
openssl genrsa -out server.key 1024
openssl req -new -key server.key -out server.csr -config openssl.cfg
(Give tomcat server
‘<hostname>’
for field ‘Common Name’
)
openssl x509 -req -in server.csr -out server.crt -CA ca.crt -CAkey ca.key -CAcreateserial -days 365 -extensions v3_req -extfile openssl.cfg
openssl x509 -in server.crt -text –noout (optional command to validate created certificate)
将CA证书导入密钥库
‘<hostname>’
第2步:配置Tomcat服务器
在server.xml中添加以下连接器
‘Common Name’