- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我所在的团队正在尝试使用证书将 Java J2SE 应用程序连接到安全的企业 Web 服务站点。团队成员之前都没有为此类连接创建证书和编码的经验。
我们准备并提交了 CSR,并从网络服务站点收到了 .p7b 证书。 .p7b 包含两个证书:一个由 Web 服务站点颁发给我们,另一个由公司所有者自己的 CA 颁发给 Web 服务站点。两者都出现在下面的 keystore 列表中。 keystore 在自定义 SSLContext 中被引用,Java 代码使用该 SSLContext 创建一个 Apache HttpClient,没有错误。
当 Java 代码尝试执行 HttpGet 时,Web 服务站点拒绝 SSLHandshake 并终止连接并出现错误:
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
在握手调试跟踪中,在握手的第 13 步中,消息是:
ServerHelloDone
Warning: no suitable certificate found - continuing without client authentication
Certificate chain
Empty
Keytool 将 keystore 的内容列为:(公司身份已编辑)
Keystore type: PKCS12
Keystore provider: SUN
Your keystore contains 1 entry
Alias name: server
Creation date: Mar 28, 2019
Entry type: PrivateKeyEntry
Certificate chain length: 2
Certificate[1]:
Owner: ...
Issuer: ...
Serial number: ...
Valid from: Mon Mar 11 19:00:00 CDT 2019 until: Wed Mar 11 18:59:59 CDT 2020
Certificate fingerprints:
SHA1: ...
SHA256: ...
Signature algorithm name: SHA1withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3
Extensions:
#1: ObjectId: 2.16.840.1.113733.1.6.9 Criticality=false
0000: 01 01 FF ...
#2: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
CA:false
PathLen: undefined
]
#3: ObjectId: 2.5.29.31 Criticality=false
CRLDistributionPoints [
[DistributionPoint:
[URIName: http://onsite-crl.pki.digicert.com/ATTServicesIncApplicationCertificates/LatestCRL.crl]
]]
#4: ObjectId: 2.5.29.15 Criticality=false
KeyUsage [
DigitalSignature
Key_Encipherment
]
#5: ObjectId: 2.16.840.1.113730.1.1 Criticality=false
NetscapeCertType [
SSL client
]
Certificate[2]:
Owner: ...
Issuer: ...
Serial number: ...
Valid from: Wed Feb 23 18:00:00 CST 2011 until: Tue Feb 23 17:59:59 CST 2021
Certificate fingerprints:
SHA1: ...
SHA256: ...
Signature algorithm name: SHA1withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3
Extensions:
#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 97 20 99 C2 73 2A 45 EB E0 02 7F 47 DA 7B AB 7C . ..s*E....G....
0010: EB 1F AF 6E ...n
]
]
#2: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
CA:true
PathLen:0
]
#3: ObjectId: 2.5.29.31 Criticality=false
CRLDistributionPoints [
[DistributionPoint:
[URIName: http://onsitecrl.verisign.com/offlineca/ATTServicesIncATTServicesIncRootCA.crl]
]]
#4: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [
Key_CertSign
Crl_Sign
]
#5: ObjectId: 2.5.29.17 Criticality=false
SubjectAlternativeName [
CN=VeriSignMPKI-2-51
]
#6: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 25 64 37 69 DB DC 57 99 43 80 79 29 90 6C B8 13 %d7i..W.C.y).l..
0010: 58 EE B6 D0 X...
]
]
*******************************************
*******************************************
]
}
keystore 似乎包含我们私钥的条目,但不包含客户端证书;仅列出来自 Web 服务站点的 .p7b 的两个证书。
StackOverflow 帖子位于:
why doesn't java send the client certificate during SSL handshake?
建议从 keystore 中导出客户端证书并编辑证书链。这并不能解决问题,显然是因为 keystore 包含我们的私钥而不是我们的签名证书。
我没有标识为客户端证书的工件。 Oracle 过程给出于:
https://docs.oracle.com/cd/E19509-01/820-3503/ggezu/index.html
建议签名的客户端证书应该在准备原始 CSR 的过程中创建(过程的第 3 步),但是我们似乎没有将该证书文件作为单独的工件。
我认为我们需要重建客户端证书并将其导入到 keystore 中证书链的适当位置。由于在创建 CSR 时我们似乎没有创建原始文件,现在是否可以从头开始重新创建客户端证书(Oracle 过程的第 3 - 5 步)并编辑回链中?有没有办法从原始 CSR 中提取或重构客户端证书?
非常感谢任何问题、见解或建议。谢谢。
最佳答案
It appears that the keystore includes an entry for our private key but not a client certificate; only the two certificates from the .p7b from the web services site are listed.
您显示的由 keytool 列出的 PrivateKeyEntry 确实包含一个客户端证书(由 BC、KU 和 NCT)和一个 CA 证书,该证书可能是该客户端证书的颁发(父)证书。 (如果您使用 keytool 将这些证书导入此 keystore ,则 CA 证书肯定是颁发者,因为 keytool 会验证这一点;如果您使用其他工具,它应该执行相同的要求,但可能不会。)您描述p7b 包含“公司所有者自己的 CA 发布的 Web 服务站点的第二个”,但 (1) 如果是这种情况,keytool 不会将其作为同一链的一部分导入,并且 (2) 它没有意义,因为客户端在其 keystore 或 信任库中不需要 CA 颁发的(即非自签名)服务器证书,在其信任库中只需要服务器的 CA 证书,并且作为一个单独的条目不在客户端的 PrivateKeyEntry 中,即使它是一个共享文件也是如此。
根据您的描述,您得到了一个 javax.net.debug=ssl
跟踪,因此请查看该跟踪的加载 keystore 的部分,并确保此条目 正在加载,并查看服务器在 Cert Authorities
下的 *** CertificateRequest
以查看它要求的 CA(立即之前 *** ServerHelloDone
) 并将其(那些)与 keystore 中链的实际 CA 进行比较(未编辑)。由于您使用的是 Apache HttpClient,因此如果您使用的是指定 PrivateKeyStrategy 的重载之一,请确保它正确选择了别名。
关于java - 客户端证书丢失 : How to recover it,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55442135/
我在 Ubuntu 10.04 LTS 上运行 Eclipse Galileo。今天 Ubuntu 在我身上崩溃了,重新启动后,我发现 Eclipse 已经完全失去了 Java Perspective
我使用配置了 sonata_user 的 SonataAdminBundle在 config.yml : sonata_user: impersonating: route:
我有 ubuntu 14.04 但它不见了 docker exec sudo docker exec -it ubuntu_bash bash 我希望在现有正在运行的 docker 容器中运行交互式
我正在使用 Ubuntu 8.04/32 位(作为虚拟机)。在一个不是 min 的项目上执行一些 make 时,我得到了错误: g++:/usr/lib/libstdc++.a: 没有这样的文件或目录
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我正在尝试获取有关我在 UIImagePicker 中选择的视频的一些数据。 因此,当它进入 UIImagePicker 委托(delegate)方法(如下)时,我知道我需要使用信息字典中的 UIIm
我的网站最近被可能的黑客行为删除了。我上传了备份的文件夹和数据库,但现在我的 View 没有显示。其他一切都有效。我想不出有什么变化,只是上传了几天前的备份。 这些字段在 admin/build/vi
我执行以下操作来设置我的 session ,这是有效的,因为 echo 出现了。但是当我转到下一页或另一页时, session 不存在吗?我做错了什么? $session_start(); if ($
我试图在 BigQuery 中使用这段代码,显然是从 GA 中获取数据,但 _TABLE_SUFFIX 似乎有问题。错误显示“错误:无法识别的名称:_TABLE_SUFFIX at [12:3]”您能
输入:8(2 5 6 9 10 2 7 4)预期输出:(2 7 9 9 12 5 7 6)实际输出:(2 7 9 9) 这是我的大学作业,也是我第一次在这里提问。我不知道为什么,但 10 没有扫描,有
$('div'); // 我在上面的代码中遇到错误。在检查 .js 代码时,我找不到名为 $ 的函数,但根据文档,应该有一个。 最佳答案 试试 http://ajax.googleapis.co
以下简单代码的输出对我来说有点奇怪。它错过了在控制台上打印的 0 到 100 之间的一些数字。 谁能解释一下为什么省略打印?我对并发编程完全陌生。 import java.util.concurren
我正在学习 xamarin 以构建移动应用程序,但我对 Xamarin 和移动应用程序一无所知。我打开了一个空白的移动应用程序,其中有“Hello world”示例并编辑了一些文本,但我的应用程序图标
我正在将一些值存储到 sqlite 数据库中。因此,数据是作为字符串从文本字段收集的,然后转换为 double 并持久化。 这是我试过的 NSDecimalNumber 答案; value.answe
我有一个奇怪的案例。突然,其中一个表中的一些记录(这么多记录)丢失了。首先,我认为这是由我的 PHP 脚本中的错误引起的。但是,我检查了一下,我的脚本中没有DELETE操作,只有UPDATE。有谁知道
我正在复制 NSString来自 NSDictionary进入本地NSString使用 [[NSString alloc] initWithString:] ,对其进行处理(删除一些字符),然后将其发
当保存在根文件夹中时,我的非常基本的 html 页面保持样式。为一个组创建了一个新文件夹,但是当我将页面移动到该文件夹时,它们似乎失去了与 css 文件的连接。 认为问题可能出在链接上,因为它现在
我需要使用 OpenCV 训练一些图像。但问题是,我找不到 opencv_createsamples 程序。我以正常方式安装了 OpenCV,因为我使用的是 Windows 7。这个 opencv_c
我有一个绑定(bind)到 JTable 的 ArrayList。之后 bindingGroup.unbind(); bindingGroup.bind(); (完成刷新数据)我丢失了表格单元格渲
所以基本上我们只是丢失了一个 keystore 和备份 keystore 。但是我们可能知道原始 keystore 的密码。 我的问题是,如果我们知道原始 keystore 的密码,我们可以重新生成
我是一名优秀的程序员,十分优秀!