12

自己署名証明書を使用する SSL でアクセスする必要があるリソースがいくつかあります。一般に、ほとんどのツールには、エラーや警告なしでこれらにアクセスできるようにするための簡単な設定があります。ただし、JVM でこれを行う適切な方法は、署名証明書を CA としてキーストアにインポートすることです。

使用したい Groovy スクリプトがありますが、キーストアを変更したり、新しいキーストアを配布したりせずに、任意の JVM でスクリプトをスタンドアロンで動作させたいと考えています。証明書の検証を無効にする簡単な方法はありますか?

4

2 に答える 2

21

少し調べた後、この投稿を見つけました。これが私が最終的に使用したものです:

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)

ご自身の責任で使用してください。これにより、証明書の検証が無効になります。

于 2010-07-13T23:36:58.950 に答える
9

私が取り組んでいるgrailsアプリでこれをやり遂げなければなりませんでした。キーストアは 1 回だけ処理します。証明書があると仮定して、それをキーストアに入れ、コマンドラインの小道具を介してjvmをキーストアに向けます...

編集 - キーストアの必要性を回避する方法を知りません。ただし、必要な証明書だけを使用して証明書を作成し、アプリで渡すことができます。あなたはそれを一度だけします。

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
于 2010-07-13T23:31:25.480 に答える