万事达卡使用两条腿的OAuth。在准备OAuth负载之后,我将其添加到授权密钥中的头中。然后,请求需要与证书一起发送。我在这一步出错了。
我已经根据上提供的示例代码编写了代码https://developer.mastercard.com/portal/display/api/Locations-示例代码
和示例密钥可在https://developer.mastercard.com/portal/display/api/OAuth验证,
生成SSL证书所遵循的步骤:
1. Open the Firefox browser and enter the URL : https://sandbox.api.mastercard.com
2. Click on the lock icon on the bottom of the browser.
3. Click on View Certificate
4. Click on the Details tab
5. Under "Certificate Hierarchy", click on the issuing CA (beside the arrow)
6. Click on Export..
7. Save the .PEM file (suppose with "openapi-sandbox.pem").
8. Then using Java's keytool, Load this into a JKS keystore using a command like this:
keytool-import-alias openapi samplecode ssl cert-file openapi沙箱。pem-密钥库openapi示例代码。jks
准备请求的代码
URL url = new URL(httpsURL);
con = (HttpsURLConnection) url.openConnection();
con.setRequestMethod(method);
con.setSSLSocketFactory(getSocketFactory());
con.setDoOutput(true);
con.setDoInput(true);
con.addRequestProperty("Authorization", buildAuthHeaderString(params));
和函数来处理证书文件
private SSLSocketFactory getSocketFactory()
{
KeyStore ks = KeyStore.getInstance("JKS");
// get user password and file input stream
char[] password = "prince".toCharArray();
ClassLoader cl = this.getClass().getClassLoader();
String location = "D:\\DEV_HOME\\openapi-samplecode6.jks";
// String location = "openapi-samplecode1.jks";
System.out.println("location =" + location );
InputStream stream = cl.getResourceAsStream(location);
ks.load(stream, password);
// stream.close();
SSLContext sc = SSLContext.getInstance("TLS");
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
kmf.init(ks, password);
tmf.init(ks);
sc.init(kmf.getKeyManagers(), tmf.getTrustManagers(),null);
return sc.getSocketFactory();
}
提前感谢您的时间。:)
javax.net.ssl.SSLHandshakeExc0019:sun.security.validator.ValidatorExc0019:没有找到可信证书在sun.security.ssl.lerts.getSSLExc0019(未知来源)在sun.security.ssl.SSLSocketImpl.fatal(未知来源)在sun.security.ssl.Handshaker.fatalSE(未知来源)在sun.security.ssl.Handshaker.fatalSE(未知来源)在sun.security.ssl.ClientHandshaker.server证书(未知来源)在sun.security.ssl.ClientHandshaker.process消息(未知来源)在sun.security.ssl.Handshaker.process循环(未知来源)sun.security.ssl.Handshaker.process_record(未知来源)sun.security.ssl.SSLSocketImpl.read记录(未知来源)sun. security. ssl。在sun. security. ssl.初始化握手(未知来源)。在sun. security. ssl的SSLSocketImp. start握手(未知来源)。SSLSocketImp. start握手(未知来源)在sun. net. www.协议. http。后连接(未知来源)在sun. net.连接(未知来源)在sun. net. www.协议。在mypack连接(未知来源)。MasterCardDemo. createOpenAPIConnection(MasterCardDemo. java: 183)at mypack.MasterCardDemo. main(MasterCardDemo. java: 64)引起:sun. security. validator。异常:在sun. security. validator中没有找到受信任的证书。SimpleValidator. BuildTrustedChain(未知来源)在sun. security. validator。在sun. security. validator上进行SimpleValidator. Engineering验证(未知来源)。在sun. security. ssl验证(未知来源)。X509TrustManagerImp. valester(未知来源)at sun. security. ssl.X509TrustManagerImp. check信任(未知来源)在sun. security. ssl。X509TrustManagerImp. check ServerTrusted(未知来源)
这实际上是一个SSL问题,与MasterCard的OAuth没有什么关系。您需要说服Java信任服务器上的SSL证书https://api.mastercard.com.您将OAuth证书放在信任存储中,而不是MasterCard证书。比将密钥放在信任存储中更好的解决方案是信任根CA。在Java中,可以使用默认的套接字因子来实现这一点。替换此代码:
con.setSSLSocketFactory(getSocketFactory());
为此:
con.setSSLSocketFactory((SSLSocketFactory)SSLSocketFactory.getDefault());
问题内容: 我在java和cxf中有一个用客户端证书连接到WebServices的应用程序。 我从WebService所有者那里获得了证书 证书 证书 certificate.crt Trusted_ca.cer root_ca.cer 我直接将这个p12证书转换为java要求的有效jks密钥库时遇到问题。 我这样做: 但是此jks不起作用,使用此证书时我收到HTTP响应‘403:Forbidde
问题内容: 我需要传递基于Ajax的帖子请求,但不确定如何才能以最佳方式完成。使用内部签入请求的平台(仅POST请求) 最初我想将其添加到标题中 这将使其可用于每个Ajax请求,但不适用于我的情况,因为in请求仍然以null形式出现。 我可以为所有处理类型的Ajax调用设置任何方法吗 编辑 如果我在Ajax调用中执行了类似的操作 一切正常。 我的问题是,我想将值作为请求参数而不是请求标头传递 问题
我正在使用OpenSSL生成证书签名请求(CSR)。 但是,我希望将自己的字段添加到证书中,例如: GroupID:348348923 EmployeeLevel:Class 3 在我请求证书颁发机构(CA)签署CSR之前,正确的方法是什么?
问题内容: 之前我使用模块在请求中添加标头。现在,我正在对该模块尝试相同的操作。 这是我正在使用的python请求模块:http : //pypi.python.org/pypi/requests 如何向和添加标头。说我必须在标题的每个请求中添加密钥。 问题答案: 从http://docs.python- requests.org/en/latest/user/quickstart/ 您只需要用标
问题内容: 我有一个Java客户端尝试使用自签名证书访问服务器。 当我尝试发布到服务器时,出现以下错误: 无法找到到请求目标的有效认证路径 在对该问题进行了一些研究之后,我进行了以下工作。 1. 2. 将我的服务器域名保存为root.cer文件。 3. 在我的Glassfish服务器的JRE中,运行了此命令: 4. keytool -import -alias example -keystore
问题内容: 我的文件带有证书链-certificate.cer: 我需要将此证书链添加到密钥库。 我做的事: 结果,我在密钥库中只有1个证书。 但是应该有3. 什么地方可能出问题? 解决方案: CA向我发送了PKCS#7格式的证书。 我将它们存储在certificate.p7b文件中,然后通过以下命令将它们成功添加到密钥库中: 问题答案: 从keytool管理员中-如果以PKCS#7格式输入,它将