我有一些资源,我必须使用SSL来访问使用自签名证书。通常,大多数工具都有一个简单的设置,允许无错误地访问这些工具或只是警告。但是,使用JVM执行此操作的正确方法似乎是将签名证书作为CA导入密钥库。
我有一个我想要使用的groovy脚本,但我更喜欢我的脚本在任何任何JVM上独立工作,而无需修改密钥库或分发新的密钥库。有没有一种简单的方法来覆盖认证验证?
答案 0 :(得分:18)
经过一番研究,我找到了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)
使用风险自负:这会破坏证书验证!
答案 1 :(得分:9)
我只需要使用我正在处理的grails应用程序。您只需处理一次密钥库。假设你有证书,只需将它放入你的密钥库,然后通过命令行道具将你的jvm指向密钥库......
编辑 - 我不知道有什么方法可以绕过对密钥库的需求。但是您可以使用您需要的证书创建一个并使用您的应用程序传递它。你只做一次。
编辑编辑 - 这是keytool和java CL prop的命令
keytool -import -trustcacerts -alias www.the-domain.com -file the-cert.der -keystore store.jks
-Djavax.net.ssl.trustStore=/path/to/store.jks
答案 2 :(得分:-4)
如果调用命令行程序curl
而不是使用本机groovy / JVM工具,则可以通过从命令行运行以下命令来禁用用户的证书检查:
$ echo 'insecure' >>~/.curlrc