我从服务团队获得了以下密钥/证书,通过SSL调用他们的API,我通过curl命令验证了。
view.addSubview(newButton) //the view that contains your content
scrollView.documentView = view //triggers everything to be recalculated
CURL命令:
1. QA.test.key
2. QA.test.pem
现在,要通过https在Java中调用API,我是否需要执行以下操作?
执行以下操作
curl --key QA.test.key --cert ./QA.test.pem -X POST --header "Content-Type: application/json" --header "Accept: application/json" -d '{"pan":"1234567890123456", "client": " Application Name "}' https://test-qa.abc.com/tokenize
}
使用jks文件时出现无效证书错误,创建jks文件并导入.key和.pem文件以使其正常工作的最佳方法是什么?
答案 0 :(得分:2)
使用OpenSSL实用程序创建PKCS#12文件。然后,您可以使用系统属性将其指定为密钥库。
CREATE OR REPLACE FUNCTION F_before_insert_detall() RETURNS TRIGGER AS $F_before_insert_detall$
Declare stock INT;
BEGIN
stock = (select existencias from productos where id_fab=NEW.fab AND id_producto = NEW.producto);
IF NEW.cantidad > stock THEN
NEW.cantidad := stock;
END IF;
NEW.preu := (select precio from productos where id_fab=NEW.fab AND id_producto = NEW.producto);
RETURN NEW;
END;
$F_before_insert_detall$ LANGUAGE plpgsql;
CREATE TRIGGER before_insert_detall BEFORE INSERT ON detall FOR EACH ROW
EXECUTE PROCEDURE F_before_insert_detall();
此命令将提示输入密码以加密新的PKCS#12文件。它还可能会提示用于加密openssl pkcs12 -export -in QA.test.pem -inkey QA.test.key -out test.pkcs12
的密码(如果有)。
javax.net.ssl.keyStore=test.pkcs12 javax.net.ssl.keyStorePassword=<whatever you entered when creating PKCS #12> javax.net.ssl.keyStoreType=PKCS12
QA.test.key
属性是分开的;它们会影响如何验证服务器。如果服务器使用由“真实”CA颁发的证书,则必须在Java运行时中提供必要的证书。否则,您将不得不创建一个额外的密钥库,可以使用Java的trustStore
命令来完成。
答案 1 :(得分:1)
创建jks的最简单方法是使用GUI工具portecle http://portecle.sourceforge.net
创建JKS&gt;导入密钥/对
您还可以使用keytool和OpenSSL。请检查此importing an existing x509 certificate and private key in Java keystore to use in ssl
考虑您需要一个用于客户端证书的keyStore和一个用于服务器证书的trustStore。通常,客户端证书也包含它们。如果没有,还包括JKS中的证书(与其他文件相同)
要调用并发送json,您可以使用httpsURLconnection
HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
conn.setSSLSocketFactory(sslFactory);
conn.setMethod("POST");
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type","application/json");
conn.connect();
OutputStream os = conn.getOutputStream();
os.write(jsonString.getBytes());
os.flush();
os.close();
要创建socketFactory,您可以使用
SSLContext sc = SSLContext.getDefault();
SSLSocketFactory sslFactory = sc.getSocketFactory();
这里有一个完整的示例(使用java代码创建信任库和密钥库)How can I use different certificates on specific connections?
如果您遇到SSL连接问题,请添加
System.setProperty("javax.net.debug", "ssl");