LoginSignup
9
7

More than 5 years have passed since last update.

MacでJenkinsを動かす際にSSL証明書エラーでオフラインになってしまう際の対応

Posted at

MacOSXにhomebrewを利用して、Jenkinsを導入しようとした際に、Javaで信用できないSSL証明書エラー(javax.net.ssl.SSLHandshakeException)が出た際の対応方法についてのメモ

※インストール方法は「mac jenkins brew」とかで検索すれば出て来るので割愛。

インストール完了後、起動して初期設定を行おうとした際、オフライン状態になってプラグインのインストールも全くできなかったのでログを見たところ、このようなエラーが出ていた。

Apr 28, 2018 12:40:10 AM hudson.model.UpdateCenter updateDefaultSite
警告: Upgrading Jenkins. Failed to update the default Update Site 'default'. Plugin upgrades may fail.
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1509)
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:914)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1513)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1441)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
    at hudson.model.DownloadService.loadJSON(DownloadService.java:167)
    at hudson.model.UpdateSite.updateDirectlyNow(UpdateSite.java:190)
    at hudson.model.UpdateCenter.updateDefaultSite(UpdateCenter.java:2194)
    at jenkins.install.SetupWizard.init(SetupWizard.java:174)
    at jenkins.install.InstallState$InitialSecuritySetup.initializeState(InstallState.java:142)
    at jenkins.model.Jenkins.setInstallState(Jenkins.java:1033)
    at jenkins.install.InstallUtil.proceedToNextStateFrom(InstallUtil.java:97)
    at jenkins.install.InstallState$Unknown.initializeState(InstallState.java:75)
    at jenkins.model.Jenkins$17.run(Jenkins.java:3149)
    at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:169)
    at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:296)
    at jenkins.model.Jenkins$5.runTask(Jenkins.java:1062)
    at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:214)
    at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387)
    at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
    at sun.security.validator.Validator.validate(Validator.java:260)
    at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324)
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229)
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1491)
    ... 29 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382)
    ... 35 more

原因としては、javaで証明書を検証した際に、信用できない、という事なので、javaの信用済み証明書情報に直接証明書を追加すれば良いという話なので、下記の流れで追加して対応。

1. 証明書を入手

2018/4/28時点では、https://updates.jenkins.io/update-center.json
の証明書を入れれば大丈夫だったので、chromeなどでサイトにアクセスして、証明書を表示してDLする。
(証明書のDLについては、chromeでサイトを表示して、URL欄の「保護された通信」を押して「証明書」を選択、その後、表示されている証明書の"画像部分"を適当なフォルダにDrag&Dropすると、"updates.jenkins.io.cer"とかが手に入るはず)

2. keytoolで証明書を登録
cd `/usr/libexec/java_home`/jre/lib/security

sudo keytool -importcert -file [certをDLしたパス]/updates.jenkins.io.cer -keystore cacerts

この際キーストアのパスワードを聞かれるので "changeit" を入力する。
(デフォルト設定なので、"java default keystore password"とかで検索すると良いかと)

3. jenkins起動

これで、多分アクセスできるようになってるはず。

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7