JavaエージェントがContrast UIに接続できない:javax.net.ssl.SSLHandshakeException

  • 更新
ライセンス オンプレミスおよびSaas
製品 AssessとProtectの両方、もしくは単体
製品カテゴリ   Javaエージェント
サブカテゴリ 接続

問題

Contrast Javaエージェントを使用してアプリケーション起動すると、次のエラーが表示される。

ERROR - Problem resolving features with com.contrastsecurity.agent.features.%
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed:

原因

このエラーの原因はいくつか考えられますが、最も一般的な原因はルートCA(ルート認証局)を信頼できないためです。 その場合、次のようなメッセージが表示されます:

Unable to find valid certification path to requested target

PKIXCertPathBuilderImpl could not build a valid CertPath

この問題が発生する理由としては、証明書検証時にファイアウォールやプロキシサーバのCA(認証局)に入れ換わっている可能性が考えられます。

解決方法

これを確認するには、Contrast UIに対して簡単なcurlコマンドを実行してCA(認証局)を検証します:

curl -HAccept:application/json -HAuthorization:test -HAPI-Key:test https://app.contrastsecurity.com/Contrast/api/applications -v

もしくは、プロキシ経由を明示的に指定

curl -HAccept:application/json -HAuthorization:test -HAPI-Key:test https://app.contrastsecurity.com/Contrast/api/applications -v --proxy http://proxyserver.company.com:8080
下記の例のようにサーバ証明書の結果が返されるので、issuer:の行を確認してください:
Server certificate:
*  subject: CN=*.contrastsecurity.com
*  start date: Sep 10 00:00:00 2018 GMT
*  expire date: Oct 10 12:00:00 2019 GMT
*  subjectAltName: host "app.contrastsecurity.com" matched cert's "*.contrastsecurity.com"
 issuer: C=US; O=Amazon; OU=Server CA 1B; CN=Amazon
*  SSL certificate verify ok.
Windows環境でcurlが利用できない場合は、以下のPowerShellコマンドを使用すれば、Contrast.cerという名前のファイルに証明書の内容が出力されます:
$webRequest = [Net.WebRequest]::Create("https://app.contrastsecurity.com")
try { $webRequest.GetResponse() } catch {}
$cert = $webRequest.ServicePoint.Certificate
$bytes = $cert.Export([Security.Cryptography.X509Certificates.X509ContentType]::Cert)
set-content -value $bytes -encoding byte -path "$pwd\Contrast.cer"
そして、出力された証明書ファイルをダブルクリックして内容を確認してください。
 
ContrastのSaaS版をご利用のお客様の場合、発行者はAmazonである必要があります。オンプレミス(EOP)版をご利用のお客様の場合、発行者はサーバ証明書に署名されたCA(認証局)と一致している必要があります。発行者が異なる認証機関である場合、ファイアウォールやプロキシサーバでエージェントとサーバ間のSSL通信検証時に、証明書がすり替えられている可能性があります。以下のいずれかの方法で、対応してください。
 

方法1 - 例外を許可する

プロキシ/ファイアウォール(Blue Coatなど)の管理者に連絡し、Contrast UIへの通信をバイパスする設定ができるか確認してください。

 

方法2 - 証明書を信頼する

エージェントを導入するアプリケーションサーバのJVMで使用されているトラストストアに証明書をインポートします。手順は、こちらを参照ください。

 

方法3 - 証明書の例外を無視する

JVMシステムプロパティを使用する場合、次の設定によって証明書検証のエラーを無視することができます:

-Dcontrast.api.ignore_cert_errors=true

 YAML設定ファイルを使用する場合は、次のようになります:

api:
ignore_cert_errors: true

この記事は役に立ちましたか?

1人中1人がこの記事が役に立ったと言っています

他にご質問がございましたら、リクエストを送信してください