- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用OpenSSL生成了CSR:
openssl req -out MyCompanyCsr.csr -new -newkey rsa:2048 -nodes -keyout MyCompanyPrivateKey.key
- MyCompanyPrivateKey.key
- MyCompanyCsr.csr
- PartnerIntermediateCa.crt
- PartnerRootCa.crt
- MyCompanyCsr.crt
KeyStore trustStore = KeyStore.getInstance("JKS");
InputStream tsis = ClassLoader.getSystemResourceAsStream(trustStorePath);
trustStore.load(tsis, "mypassword".toCharArray());
tsis.close();
KeyStore keyStore = KeyStore.getInstance("JKS");
InputStream ksis = ClassLoader.getSystemResourceAsStream(keyStorePath);
keyStore.load(ksis, "mypassword".toCharArray());
if (ksis != null) {
ksis.close();
}
TrustManagerFactory tmf =
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(trustStore);
KeyManagerFactory kmf =
KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(keyStore, "mypassword".toCharArray());
SSLHandshakeException
并显示消息
http.client.failed
:
com.sun.xml.ws.client.ClientTransportException: HTTP transport error:
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
keystore
和
truststore
是从浏览器导出的,其中客户端私钥为
PKCS
,服务器证书为
x509 Cert PKCS#7 w/ Chain'. Then opened them up in Portecle and exported them both as
JKS`文件。
keystore
和
truststore
?
最佳答案
我终于想通了。我使用了FireFox和Portecle。
在浏览器中安装服务器证书和私钥。
注意:一个总是令人困惑的地方:就Portecle / Java而言,“ truststore”和“ keystore”都是密钥库。唯一的不同是,我们在客户端中用作密钥库的密钥将具有除公共证书之外的私有密钥。
使用服务器证书构建的TrustStore:
转到该地址处的URL,单击地址栏旁边的(锁定图标,显示已启用SSL)
安全选项卡>查看证书>详细信息选项卡>导出按钮
选择类型:X.509带链证书(PKCS#7)。
另存为ffTestServerCert.crt
通过以下方法在Portecle中打开:检查菜单>检查证书>选择ffTestServerCert.crt
您现在可以看到其中包含的证书(例如,我看到3个)。每个都需要自己导出。单击页面顶部以及每个按钮的箭头按钮:
点击“ PEM编码”按钮
保存按钮
另存为.pem文件在磁盘上(例如,说我有caCert1.pem,caCert2.pem,caCert3.pem)
在Portecle中创建新的密钥库:File> New Keystore> JKS
对于从上方导出的每个证书(caCert1.pem,caCert2.pem,caCert3.pem),请执行以下操作:
工具>导入可信证书>选择.pem>导入按钮
弹出消息框,提示我们需要确定我们是否信任此证书。
单击确定>确定(如果您信任证书)>是>输入别名(我将其保留为默认值)>确定
对要导入的任何其他证书重复上述步骤(我全部完成了3个)。
在Portecle中保存密钥库:
文件>将密钥库另存为...>
输入信任库密码两次
输入名称以将其另存为,例如clientTrustStore.jks
恭喜,这是有效的信任库。
使用私钥和服务器证书构建的KeyStore:
首先将私钥导入FireFox(或Chrome或IE)
使用浏览器以PKCS格式导出私钥。
Firefox>首选项>高级选项卡>加密选项卡>查看证书>您的证书
选择要导出的文件,然后单击“备份”按钮
(这里只有选项是PKCS12格式,这是我们想要的)
选择一个名称-clientKeys.p12
输入密钥库的密码
应该说它们已导出,请单击“确定”。
在Portecle中打开钥匙
File> Open Keystore>选择我们上面保存的clientKeys.p12
输入上面选择的密码
使用Portecle转换为JKS
工具>更改密钥库类型> JKS
阅读有关当前类型如何不支持密钥对输入密码的警告消息
重要说明:此操作为密钥对条目password
设置内部密码。
要更改内部密钥对条目的密码,请在Portecle的文件中选择任何“密钥对”(它们的图标将是一对密钥,位于另一个密钥的顶部)
右键单击“密钥对条目”>“设置密码”
输入旧密码(即“ password”),然后输入所需的新密码
打好
保存密钥库:
在Portecle中执行以下操作:文件>将密钥库另存为>输入名称,例如clientKeyStore.jks。
点击保存
已完成
现在,您已经具有正确配置的clientTrustStore.jks和clientKeyStore.jks用于验证客户端。
要查看如何使用这些示例,您可以查看以下内容:
SOAP with mutual SSL - how to send over credentials?
关于java - 相互SSL-以正确的格式获取 key /信任库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11894468/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!