在HTTPS中从Node JS调用Java REST API(在Tomcat上)

时间:2015-11-26 15:39:47

标签: java node.js tomcat ssl https

我正在涉足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并导入它们?

1 个答案:

答案 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)

  1. 创建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

  2. 修改openssl文件夹中的openssl.cfg/openssl.cnf文件,如下所示(通常可以在openssl / bin文件夹中找到)。 (这是为了在证书中添加主机名/ IP地址到‘subjectAltName’

    a)确保分配'v3_req'并且未注释

    ‘subjectAltName’

    b)然后在'v3_req'下附加主机名,如下所示:

    req_extensions = v3_req

  3. 创建服务器密钥,csr和&用我们的CA签名

    subjectAltName = @alt_names [alt_names] DNS.1 = <hostname of Tomcat server> IP.1 = <IP address of Tomcat server>

  4. 将服务器的证书文件和私钥转换为PKCS#12

    <hostname of Tomcat server>

  5. 通过'agent'属性在NodeJS的'request'调用中传递'ca.crt':

    <IP address of Tomcat server>

  6. 将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)

  7. 将CA证书导入密钥库

    ‘<hostname>’

  8. 第2步:配置Tomcat服务器

    1. 将keystore.jks文件复制到apache-tomcat-8.0.21 / conf目录
    2. 在server.xml中添加以下连接器

      ‘Common Name’