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

3

我正在使用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();
}

1
请提供一个 [mcve],具体的错误信息以及您已经尝试过的解决方法。 - anon
抱歉没有提供足够的细节。无论如何感谢您的帮助。 - jtmickde
1个回答

3
我已经理解了,并为其他人提供参考。我必须将我的.key和.crt文件转换为.p12文件,然后将其转换为.jks文件。 我按照这里的链接进行操作:导入现有的x509证书和私钥到Java keystore以在ssl中使用 一旦我的密钥库正确设置,我就按照java中的这个页面进行操作:如何请求需要客户端证书进行身份验证的URL。我的错误在于我没有正确设置JVM参数。我必须添加这些javax.net.ssl.keyStorejavax.net.ssl.keyStorePassword。一旦我将它们添加到我的JVM中,它就可以完美运行了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接