Jenkins のアップデートサイトに認証付きプロキシ経由でアクセスしようとして 407 エラーとなるのに対処

# 対象

OS は CentOS 7.5.1804 を使用。

```
~# cat /etc/centos-release
CentOS Linux release 7.5.1804 (Core)
```

Java は yum でインストールした OpenJDK 11 を使用。

```
~# java -version
openjdk version "11.0.4" 2019-07-16 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.4+11-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.4+11-LTS, mixed mode, sharing)
```

Jenkins は yum でインストールした 2.190.1 を使用。

```
~# yum info jenkins
インストール済みパッケージ
名前                : jenkins
アーキテクチャー    : noarch
バージョン          : 2.190.1
リリース            : 1.1
...省略...
```

# 問題

Jenkins の設定ページで「プラグインマネージャー」→「高度な設定」→「HTTP Proxyの設定」に認証付きプロキシを設定して保存する。

その後に「更新」をクリックすると以下のエラーメッセージが表示されてしまう。

> There were errors checking the update sites: IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authentication Required"

/var/log/jenkins/jenkins.log には以下のように記録されている。

```
2019-10-15 06:09:00.790+0000 [id=19]    INFO    hudson.util.Retrier#start: Attempt #1 to do the action check updates server
2019-10-15 06:09:00.930+0000 [id=19]    INFO    hudson.util.Retrier#start: The attempt #1 to do the action check updates server failed with an allowed exception:
java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authentication Required"
        at java.base/sun.net.www.protocol.http.HttpURLConnection.doTunneling(HttpURLConnection.java:2168)
...省略...
2019-10-15 06:09:00.932+0000 [id=19]    INFO    hudson.util.Retrier#start: Calling the listener of the allowed exception 'Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authentication Required"' at the attempt #1 to do the action check updates server
2019-10-15 06:09:00.932+0000 [id=19]    INFO    hudson.util.Retrier#start: Attempted the action check updates server for 1 time(s) with no success
2019-10-15 06:09:00.932+0000 [id=19]    SEVERE  hudson.PluginManager#doCheckUpdatesServer: Error checking update sites for 1 attempt(s). Last exception was: IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authentication Required"
```

「アップデートサイト」の設定はデフォルトで "https://updates.jenkins.io/update-center.json" となっており "https" から "http" に変更するとエラーが出なくなる。

# 対処方法

ググって以下のページで対処方法を把握。

* https://stackoverflow.com/a/55593753
* https://qiita.com/kaakaa_hoe/items/d4fb11a3af035a287972

以下、引用。

> Java 8 Update 111からjava.netパッケージのHTTPS接続の際のトンネリングにBasic認証を使用できない設定がデフォルトになったようです。
> 回避するにはjdk.http.auth.tunneling.disabledSchemesに空文字列を設定する必要があるそうです。

Jenkins の場合はどこに記述するのが良いか以下のように確認して、設定、再起動。

```
~# systemctl status jenkins
...省略...
  Process: 7034 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=0/SUCCESS)
...省略...

~# cat /etc/rc.d/init.d/jenkins
...省略...
JENKINS_CONFIG=/etc/sysconfig/jenkins
...省略...

~# cp /etc/sysconfig/jenkins{,.original}
~# vi /etc/sysconfig/jenkins
~# diff /etc/sysconfig/jenkins{.original,}
47c47,48
< JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
---
> #JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
> JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Djdk.http.auth.tunneling.disabledSchemes="

~# systemctl restart jenkins
```

Jenkins 再起動後に改めて「更新」をクリックして、エラーが出ずアップデートサイトにアクセスできることを確認。

# 関連

「HTTP Proxyの設定」にある「高度な設定...」の「テストURL」に "https" と "http" の URL のどちらを入力しても「Proxyの接続確認」をクリックすると以下のようにエラーメッセージが表示されてしまう。

> https://www.google.com/ に接続できませんでした。(コード 407).

/var/log/jenkins/jenkins.log には以下のように記録されている。

```
2019-10-15 09:05:05.557+0000 [id=15]    INFO    o.a.c.h.a.AuthChallengeProcessor#selectAuthScheme: basic authentication scheme selected
2019-10-15 09:05:05.557+0000 [id=15]    SEVERE  o.a.c.h.HttpMethodDirector#processAuthenticationResponse: Invalid challenge: BASIC
org.apache.commons.httpclient.auth.MalformedChallengeException: Invalid challenge: BASIC
        at org.apache.commons.httpclient.auth.AuthChallengeParser.extractParams(AuthChallengeParser.java:107)
...省略...
```

こちらは例外クラスが違う。対処方法は未調査。