1

我有这个要求,应用程序是分布式的,所以端点是每个公司的,没有集中的。问题是应用程序需要允许自签名证书。

显然,我不能只在应用程序中对证书进行硬编码,然后使用数百万可用的片段来执行此操作。

那么,有没有办法处理这种证书不受信任的 SSL 异常,然后向用户显示“此证书不受信任 bla bla。接受?”。

TLDR;如何在 OkHttp 中获取有问题的证书内容,然后可以将其保存在 sslSocketFactory 子类中?

4

1 回答 1

0

您可以调整类似于以下示例代码的内容

private fun createInsecureTrustManager(): X509TrustManager = object : X509TrustManager {
  override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) {}

  override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String) {
    val s = "Do you want to accept {${chain.first().subjectX500Principal.name}}?"
    val response = JOptionPane.showConfirmDialog(null, s, "Confirm",
        JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE)
    if (response == JOptionPane.NO_OPTION) {
      throw CertificateException("Not accepting ${chain.first().subjectX500Principal.name}}")
    }
  }

  override fun getAcceptedIssuers(): Array<X509Certificate> = arrayOf()
}

将其添加到密钥库不需要成为目标,您应该能够在运行密钥库验证之前接受它。nb 此示例可能应该回退到默认逻辑,但它应该可以帮助您入门。

于 2019-06-22T16:40:51.267 回答