Java - 使用证书和私钥发出 HTTP POST 请求
Java - Using a certificate and private key to make an HTTP POST request
我正在 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 中执行以下 Java 脚本的功能:
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 文件。
我通过在 link 此处 importing an existing x509 certificate and private key in Java keystore to use in ssl 进行操作来做到这一点
正确设置密钥库后,我在 java How to request a URL that requires a client certificate for authentication 中关注了此页面。我出错的地方是我没有正确设置我的 JVM 参数。我不得不把这些 javax.net.ssl.keyStore 和
javax.net.ssl.keyStore密码。一旦我将它添加到我的 JVM 中,它 运行 就完美了。
我正在 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 中执行以下 Java 脚本的功能:
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 文件。 我通过在 link 此处 importing an existing x509 certificate and private key in Java keystore to use in ssl 进行操作来做到这一点 正确设置密钥库后,我在 java How to request a URL that requires a client certificate for authentication 中关注了此页面。我出错的地方是我没有正确设置我的 JVM 参数。我不得不把这些 javax.net.ssl.keyStore 和 javax.net.ssl.keyStore密码。一旦我将它添加到我的 JVM 中,它 运行 就完美了。