SparkFun SAMD21 Mini Breakout でのArduino IDEでのエラー

[2018/06/11の投稿を再利用]

SparkFun SAMD21 Mini Breakoutを使用してArduinoのコードを試そうとしたところ、IDEのボードマネージャーでJavaのエラーが出力されてボードを追加できませんでした (手順は SparkFunのページに書いてある通り)。

出力されていたエラーは次の通り。

https://github.com/sparkfun/Arduino_Boards/raw/master/IDE_Board_Manager/sparkfun-samd-1.4.0.tar.bz2のダウンロード時にエラーが発生しました
java.lang.RuntimeException: java.lang.Exception: https://github.com/sparkfun/Arduino_Boards/raw/master/IDE_Board_Manager/sparkfun-samd-1.4.0.tar.bz2のダウンロード時にエラーが発生しました
at cc.arduino.contributions.packages.ui.ContributionManagerUI.lambda$onInstallPressed$1(ContributionManagerUI.java:176)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.Exception: https://github.com/sparkfun/Arduino_Boards/raw/master/IDE_Board_Manager/sparkfun-samd-1.4.0.tar.bz2のダウンロード時にエラーが発生しました
at cc.arduino.contributions.DownloadableContributionsDownloader.download(DownloadableContributionsDownloader.java:131)
at cc.arduino.contributions.DownloadableContributionsDownloader.download(DownloadableContributionsDownloader.java:69)
at cc.arduino.contributions.packages.ContributionInstaller.install(ContributionInstaller.java:102)
at cc.arduino.contributions.packages.ui.ContributionManagerUI.lambda$onInstallPressed$1(ContributionManagerUI.java:173)
… 1 more
Caused by: 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:1959)
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:1514)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1026)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:961)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1072)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1385)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1397)
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.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)
at cc.arduino.utils.network.FileDownloader.downloadFile(FileDownloader.java:170)
at cc.arduino.utils.network.FileDownloader.download(FileDownloader.java:128)
at cc.arduino.contributions.DownloadableContributionsDownloader.download(DownloadableContributionsDownloader.java:129)
… 4 more
:
:
:

このエラーですが「javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed」をヒントに情報を探したのですが、Javaの証明書関係と言うことでJavaの環境まわりを色々とやってもダメでした。

で、思い出したのが「カスペルスキーのSSL通信への介入」です。

デフォルトで「保護機能の要求に応じて暗号化された接続をスキャンする」が選択されていますが、これが選択された状態だとSSL通信にカスペルスキーが介入して証明書の判定が失敗することがあります。これって、何かの時に見つけた問題なんだけど、何だったのか忘れてます。。orz

通常はデフォルトのままで問題ないのですが、証明書関係でエラーが出た時は、いったん「暗号化された接続をスキャンしない」を選択して証明書の問題をクリアして、また元の「保護機能の要求に応じて暗号化された接続をスキャンする」に戻します。
※ 「暗号化された接続をスキャンしない」を選択するとカスペルスキーの保護機能が低下します。必要な事柄が完了したら元に戻しましょう!