【发布时间】:2018-06-30 05:43:39
【问题描述】:
我整天都在做这件事,我只是在猜测该怎么做。似乎知道此功能如何工作的人假设其他人都知道他们在说什么。他们会说诸如使用实用程序 ABC 生成 DEF 之类的话,但假设您知道 ABC 是什么、如何使用它以及完成后如何处理 DEF。让我先说我是一名 AS400 RPG 编码员,但可以用 Java 做一些事情。我想已经够危险了。从技术上讲,我仍然不太了解信任库或密钥库是什么。
基本上,我开发了一个简单的 AS400 java 应用程序,它基本上只是调用一些 HTTP 方法来向外部方发送交易。此应用程序直接从 RPGLE 程序调用。这一直运行良好,但现在他们决定使用 HTTPS。客户向我发送了一个 .PFX 文件,其中包含他们使用 AS400 上称为数字证书管理器的实用程序创建密钥时的一些内容。我找到了足够的信息来收集我必须在 IFS 的根应用程序目录中有一个 SSL 属性文件,并且工作正在查看该属性文件,它似乎具有正确的参数。我遇到的困难是如何让证书信任应用程序。我不确定您是否需要 .PFX 文件存在于应用程序的 IFS 根目录中,或者您是否必须创建信任库/密钥库,或者您是否需要除了 SSL 属性文件之外的任何东西?我发现所有问题的答案都是肯定的,这取决于你问的是谁。一些答案会引导你走上详尽的道路,以达到某一点,结果却什么也没有发生。这更像是一种发泄。我几乎得出结论,这东西是不可能的。 :)
对于它的价值,下面是我用于仅使用 HTTP 连接到服务的代码。我一直在寻找一个简单的逐步过程来解释在 AS400 上成功发生 HTTPS 握手所需的内容。我没有足够的信息来了解我是否需要从客户那里获得更多信息,或者我是否有足够的信息来独立完成。
HttpClient m_HttpClient = null;
PostMethod m_PostMthd = null;
SimpleHttpConnectionManager m_simpleHttpConMnger = new
SimpleHttpConnectionManager();
int timeoutInMilliseconds = 10000;
m_PostMthd = new PostMethod(urlEndpoint);
m_HttpClient = new HttpClient(m_simpleHttpConMnger);
HttpConnectionManagerParams lhttpConMnger =
m_simpleHttpConMnger.getParams();
lhttpConMnger.setConnectionTimeout(timeoutInMilliseconds);
lhttpConMnger.setSoTimeout(timeoutInMilliseconds);
m_PostMthd.setRequestHeader("SOAPAction",SOAPAction);
m_PostMthd.setRequestHeader("Content-Type","text/xml; charset=UTF-8");
m_PostMthd.setRequestEntity(new StringRequestEntity(inputMsg));
int l_status = m_HttpClient.executeMethod(m_PostMthd);
System.out.println("EXECUTION STATUS : " + l_status+"\n");
InputStream is = m_PostMthd.getResponseBodyAsStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
String line;
StringBuilder response = new StringBuilder();
while ((line = rd.readLine()) != null)
{
response.append(line);
response.append('\r');
}
rd.close();
return response.toString();
【问题讨论】:
标签: java ssl ibm-midrange