我有一些资源必须通过使用自签名证书的 SSL 访问。通常,大多数工具都有一个简单的设置,允许在没有错误或只是警告的情况下访问这些工具。但是,使用 JVM 执行此操作的正确方法似乎是将签名证书作为 CA 导入到 keystore 中。
我有一个我想使用的 groovy 脚本,但我更希望我的脚本在任何 JVM 上独立工作,而无需修改 keystore 或分发新的 keystore 。有没有一种简单的方法可以覆盖认证验证?
经过一些研究,我找到了 this post .这是我最终使用的:
import javax.net.ssl.HostnameVerifier
import javax.net.ssl.HttpsURLConnection
import javax.net.ssl.SSLContext
import javax.net.ssl.TrustManager
import javax.net.ssl.X509TrustManager
def nullTrustManager = [
checkClientTrusted: { chain, authType -> },
checkServerTrusted: { chain, authType -> },
getAcceptedIssuers: { null }
]
def nullHostnameVerifier = [
verify: { hostname, session -> true }
]
SSLContext sc = SSLContext.getInstance("SSL")
sc.init(null, [nullTrustManager as X509TrustManager] as TrustManager[], null)
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory())
HttpsURLConnection.setDefaultHostnameVerifier(nullHostnameVerifier as HostnameVerifier)
使用风险自负:这会破坏证书验证!
我是一名优秀的程序员,十分优秀!