Java - 使用证书和私钥发出 HTTP POST 请求

标签 java ssl certificate keystore private-key

我正在用 Java 发出 POST 请求,需要 ssl 证书和私钥组合。我查看了 Java KeyStore 并使用以下两个命令从 .key 和 .cert 文件创建了一个 .jks 文件:

winpty openssl pkcs12 -export -in certificate.crt -inkey privatekey.key -out abc.p12

keytool -importkeystore -srckeystore abc.p12 -srcstoretype PKCS12 -destkeystore abc.jks -deststoretype JKS

但是请求失败,出现 403 异常。实际上,我想在 java 中执行以下 Javascript 函数:

function cardBalance(intent, session, response) {
    var options = {
        key: fs.readFileSync('privatekey.key'),
        cert: fs.readFileSync('certificate.crt'),
        host: "blah.blah.blah.com',
        path: '/abc/def/ghi/jkl/mno/pqr/creditcardsummary',
        method: 'POST',
        headers: {
            'Authorization': 'Bearer ' + session.user.accessToken,
            'Content-Type': 'application/json',
            'Version': '1.1.0',
            'zId': '1234',
            'aId': '123456789',
            'bId': 'bId',
            'AppName': 'AppName'
        }
    };

    var postData = JSON.stringify({
        'acctnum': '00002600452999820832'
    });

    console.log(options);

    var req = https.request(options, function (res) {
        console.log('Request Credit Card Balance');
        var data = '';

        res.on('data', function (chunk) {
            data += chunk;
        });

        res.on('end', function () {
            data = JSON.parse(data);
            console.log(data);

            if (data.CreditCardSummary.status === 'SUCCESS') {
                var balance = data.balance;
                console.log('Balance: ' + balance);
                var speechOutput = 'The current balance is $' + balance;
                response.tell(speechOutput);
            } else {
                response.tell('There was a problem getting your card balance.');
            }

        });
    });

    req.on('error', function (e) {
        console.log('An Error Occurred when calling the Gateway. ' + e);
        response.tell(e);
    });

    req.write(postData);
    req.end();
}

最佳答案

我想通了,想给其他人提供引用。我必须将我的 .key 和 .crt 文件转换为 .p12 文件,然后将其转换为 .jks 文件。 我通过点击这里的链接做到了 importing an existing x509 certificate and private key in Java keystore to use in ssl 正确设置 keystore 后,我在 java How to request a URL that requires a client certificate for authentication 中关注了此页面.我出错的地方是我没有正确设置我的 JVM 参数。我不得不把这些 javax.net.ssl.keyStorejavax.net.ssl.keyStorePassword。将其添加到我的 JVM 后,它运行完美。

关于Java - 使用证书和私钥发出 HTTP POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41967791/

相关文章:

ssl - 使用现有私钥创建 CSR

java - 我的哈希表应该使用什么大小的存储桶?

java - 用java读取一个文件

java - 在 WEB-INF/classes 文件夹外部加载资源包

ruby-on-rails - 在这种情况下 OAuth 是否矫枉过正?

java - 将证书与 https url 相关联

ssl - AlphaSSL - "CA Bundle does not match the certificate"- 在 CPanel 中

java - 在不同项目中用作已编译的 jar 时,Spring AOP 不起作用

java - TIBCO 上的 HTTPS 证书安装

java - 使用已知证书的 SSL 服务器套接字和握手