Как использовать SSL с самозаверяющим сертификатом в Groovy? - PullRequest
11 голосов
/ 14 июля 2010

У меня есть некоторые ресурсы, к которым я должен получить доступ через SSL, использующий самозаверяющие сертификаты.В целом, большинство инструментов имеют простую настройку, позволяющую получить к ним доступ без ошибок или просто предупреждений.Тем не менее, похоже, что правильный способ сделать это с JVM - это импортировать сертификат подписи в хранилище ключей как CA.

У меня есть отличный сценарий, который я хотел бы использовать, но я бы предпочелМой скрипт работает автономно на любой JVM без изменения хранилища ключей или распространения нового хранилища ключей.Есть ли простой способ отменить проверку сертификации?

Ответы [ 3 ]

18 голосов
/ 14 июля 2010

После небольшого исследования я нашел этот пост .Вот что я в итоге использовал:

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)

Используйте на свой страх и риск: это подрывает проверку сертификата!

9 голосов
/ 14 июля 2010

Мне просто нужно было пройти через приложение Grails, над которым я работаю. Вы будете иметь дело только с хранилищем ключей один раз. Предполагая, что у вас есть сертификат, просто поместите его в хранилище ключей, а затем укажите свой JVM на хранилище ключей через реквизиты командной строки ...

edit - я не знаю ни одного способа обойти необходимость в хранилище ключей. Но вы можете создать его, используя только те сертификаты, которые вам нужны, и передать их вместе с вашим приложением. Вы делаете это только один раз.

edit edit - вот команда для 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
0 голосов
/ 14 июля 2010

Если вы вызываете программу командной строки curl вместо использования собственных инструментов groovy / JVM, вы можете отключить проверку сертификатов для своего пользователя, запустив в командной строке следующее:

$ echo 'insecure' >>~/.curlrc
...