- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
现在我有一些带有由 CA 软件签名的证书的 HTTP-SSL 服务器。
我在 Windows 和 Java keystore 中都导入了 CA。
谁能指导我/为我提供一些有用的信息,让我通过简单地输入一个 URL(例如 https://10.1.1.11)来针对 Java keystore 或 Windows CertMgr 编写代码来验证 SSL 证书?只是为了检查 CA 是否受信任以及证书是否过期。
非常感谢!
最佳答案
除selfsigned以外的所有证书均由CA软件签名;也许您是指由您自己或公共(public)“知名”CA 以外的某个实体(可能是雇主或其他本地组织)运营的 CA 软件。这几乎是您需要将 CA 根证书显式添加到您的(客户端)信任库的唯一情况,因为在大多数情况下,(大多数)知名 CA 的根已预先安装,尤其是在 Windows 和 Java 中。此类“私有(private)”CA可以像知名 CA 一样使用中间(链)证书,但它们通常不这样做。
最简单和最准确的方法是只做一个虚拟请求:
new URL ("https://hostname:port/pathifneeded") .openConnection() .connect();
这会根据“当前”本地信任库和请求的主机名验证接收到的证书链(如果直接从根目录颁发,则可能只是证书,见上文),因为所有客户端/请求应该做的。这包括适当的链接,包括扩展和约束、有效签名、未过期(或 future )以及吊销(如果证书和您的 JVM 都(全部)配置为 OCSP)。
如果有任何错误,它会抛出异常。对于一个简单的独立测试程序,您不需要编写任何异常处理,只需使用打印出未捕获异常的 JVM 默认值即可。对于更复杂的环境,您可能想要捕获异常并做一些不同的事情。
默认使用的信任库是 Java 默认信任库,它是 cacerts
(或 jssecacerts
,如果存在)的内容 JRE/lib/security
目录。对于 Sun/Oracle Java 包,此文件由包提供并且最初包含 Sun/Oracle 批准的 CA 根。对于 Unix 上的 OpenJDK 包,有时它会链接到专门提供根证书的不同包,例如在 CentOS(我使用的)上,ca-certificates
包在(大部分)/etc/pki
中。请注意,您可以在一个系统上安装多个 JRE;如果是这样,请确保您设置并使用了正确的设置。
在 Windows 上(仅)您可以通过指定 sysprop javax.net.ssl.trustStoreType
值 Windows-ROOT
来使用 Windows 证书存储> 在命令行上使用 -D
或通过调用 System.setProperty
before 使用 .openConnection()
https
URL,或任何其他默认 SSL 套接字工厂的使用。
如果你不想检查主机名,你可以通过将 HttpsURLConnection
临时放在一个变量中并调用类似的东西来覆盖默认的主机名 validator
httpsconn.setHostNameVerifier( new HostnameVerifier() {
boolean verify (String name, SSLSession session){ return true; }
} );
在执行 .connect()
之前或通过调用类似的方法
HttpsURLConnection.setDefaultHostnameVerifier( ...as above... );
在 .openConnection()
之前。
关于Java - 如何通过针对 Java keystore 或 Windows CertMgr 输入 URL 来验证 SSL 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38420883/
当我在工作区执行 certsign.sh 脚本时,出现以下错误 jarsigner 错误:java.lang.RuntimeException: keystore 加载:无效的 keystore 格式
如何: 生成 keystore 生成信任库 为了让 SSL 在客户端和服务器之间工作,我只需要 的帮助使用终端命令(Keytool 和 openssl)生成用于相互身份验证的 keystore 和信任
keystore 和信任库之间有什么区别? 最佳答案 keystore 包含私钥以及证书及其相应的公钥。 信任库包含来自您希望与之通信的其他方的证书,或来自您信任的可识别其他方的证书颁发机构的证书。
我已经尝试使用命令 keytool -import -keystore *.jks -alias alias_name -keypass alias_passwd -file *.x509.pem`
我试图找出.keystore文件和.jks文件之间的区别,但我找不到它。我知道 jks 代表“Java keystore”,两者都是存储键/值对的一种方式。 使用其中一种与另一种相比有什么区别或偏好吗
我有一个包含多个客户端证书的 Java keystore 文件。我希望在我的 Java 应用程序中仅选择这些证书之一来连接到服务。有没有简单的方法可以做到这一点?到目前为止,我找到解决方案的唯一方法是
我想知道是否有一种方法可以检测程序是在默认(调试) keystore (从 eclipse 运行时)还是在签名 keystore (发布到 Android 市场时)上运行 我在我的应用程序中使用谷歌地
我是Java世界的新手,虽然使用NetBeans代码创建Web应用程序工作正常,直到执行get方法,但当我试图执行SQL查询时,glassfish无法显示来自MSQL DB的数据并给出错误。我正在使用
在 Azure 管道中有以下任务 AzureResourceManagerTemplateDeployment@3 从 ARM 模板部署 Key Vault 然后,AzurePowerShell@5
我正在使用以下命令使用 OpenSSL 创建 keystore : openssl pkcs12 -export -in mycert.crt -inkey mykey.key \
在 Azure 管道中有以下任务 AzureResourceManagerTemplateDeployment@3 从 ARM 模板部署 Key Vault 然后,AzurePowerShell@5
我使用下面的代码尝试加载 keystore 文件,但收到 java.io.IOException: 无效的 keystore 格式异常。关于如何解决此问题或导致问题的原因有什么想法吗? 加载 keys
我目前正在评估 Artifactory Pro 版本的 jar 签名功能。我正在按照此处找到的手册进行操作:https://www.jfrog.com/confluence/display/RTF/W
当我尝试将证书添加到 Keystore 时,我遇到了一个奇怪的错误。 System.out.println(x509Certificate.getPublicKey()); // prints pub
作为加密和保存数据的一部分,我们使用 AES 算法和 openssl 生成了 key 。 openssl enc -aes-256-cbc -P -nosalt Openssl 已生成 KEY 和 I
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: I lost my .keystore file! 我丢失了在 Market 上发布的 Android 应用
我不小心删除了我的应用程序的 .keystore 文件,但我仍然有用于生成 .keystore 文件的 Keystore 密码。有什么方法可以使用密码恢复该文件吗? 最佳答案 不,这不可能。一旦你失去
我正在访问一个 https URL,证书已添加到我的应用程序 keystore 属性中。 但是,目标 https URL 的证书最近发生了变化。 我们不想重新编译代码并使用更新后的 keystore
所以我有一个应用程序,允许用户使用 HTTPS 配置服务器。服务器使用 Undertow。要向 Undertow 添加 HTTPS 处理程序,我需要调用 Keystore.getInstance("J
这个问题在这里已经有了答案: Truststore and Keystore Definitions (7 个答案) 关闭 6 年前。 我有一个 PKCS#12我将其视为 keystore 文件,因
我是一名优秀的程序员,十分优秀!