愛島発電所

QT SOLAR 愛島発電所

本日の発電量
1729 kWh
現在の日射量
0 Wh/㎡
現在の外気温
2.9 ℃

(2024/12/11 00:04 更新)

下増田発電所

QT SOLAR 下増田発電所

本日の発電量
235 kWh
現在の日射量
0.7 Wh/㎡
現在の外気温
1.3 ℃

(2024/12/11 00:01 更新)

北原東発電所

QT SOLAR 北原東発電所

本日の発電量
0 kWh
現在の日射量
4 Wh/㎡
現在の外気温
1.4 ℃

(2024/12/11 00:07 更新)

長久良辺発電所

QT SOLAR 長久良辺発電所

本日の発電量
0 kWh
現在の日射量
6 Wh/㎡
現在の外気温
2.9 ℃

(2024/12/11 00:01 更新)

白坂発電所

QT SOLAR 白坂発電所

本日の発電量
208 kWh
現在の日射量
5 Wh/㎡
現在の外気温
4.8 ℃

(2024/12/10 23:35 更新)

清水沢発電所

QT SOLAR 清水沢発電所

本日の発電量
0 kWh
現在の日射量
0 Wh/㎡
現在の外気温
2.5 ℃

(2024/12/11 00:03 更新)

IO::SOCKET::SSLのエラーをルート証明書の設定更新で対処する | 技術メモ

IO::Socket::SSLのインスタンス作成時(サーバー、ポートを指定してnew)に起きる(証明書の)エラーに対処する方法です。

IO::SOCKET::SSLを利用してHTTPS通信を行うPerlスクリプトが特定のウェブサイトにアクセスする際にエラーが発生するようになりました。

IO::Socket::INET6 configuration failed SSL connect attempt failed with unknown error

error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

ルート証明書の期限切れ等が原因で発生するエラーのようです。

試しに当該ページを一般的なブラウザで閲覧してみたところ特に問題があるようには見えません(期限切れなら「接続はプライベートではりません」等と表示される)。

なので、ウェブサーバー側ではなくクライアント側の問題だと分かります。

今まで動いていたものが動かなくなるのはアップデート等の関係だろうことは想像に難くないのですが、色々と調べて試行錯誤した結果、Let’s Encryptというフリーで自動化されたオープンな認証局の証明書IdenTrust DST Root CA X3(別の認証局IdenTrustによるクロス署名)が期限切れになったことに起因していることが分かりました。

この影響を受ける可能性は古いOS、ブラウザに限られるので、手許のブラウザでは問題なく閲覧出来たようです。

また、問題となったIO::SOCKET::SSLを利用したPerlスクリプトの実行環境は影響を受けるとされるUbuntu Sever 14でした。

ということで、現在有効な証明書を使用するようにすれば解決出来そうです。

先ずはUbuntuのアップデート(update,upgrade)で対応できないか試しましたが、どうやら対応していない様子(そもそも通常版14LTSはサポート期間終了)。

ルート証明書に関することなので、設定ファイル/etc/ca-certificates.confを確認します。

期限切れで使えなくなったDST_Root_CA_X3の他に、現在有効なISRG_Root_X1もリストされています。

なので問題なく動いても良いような気もしますが、実際にはDST_Root_CA_X3でのベリファイ失敗で終了し、ISRG_Root_X1は確認されないようです。

そこで、DST_Root_CA_X3をリストから削除することにします。

当該ファイルを直接編集しても良いのですが、今後のアップデート操作等でさらに上書きされてしまう(元に戻ってしまう)可能性もあるので、パッケージの再設定を行います。

sudo dpkg-reconfigure ca-certificates

「Trust new certificates from certificate authorities?」と聞かれるので「ask」を選んで、「mozilla/DST_Root_CA_X3.crt」を外します。

/etc/ssl/certs/を確認すると対応するルート証明書がなくなっていることが分かります。

これで、ルート証明書ISRG_Root_X1が使われるようになり、IO::SOCKET::SSLが使えるようになりました。

curl等でエラーが出る場合も同じく対応出来ると思います。

SSLサーバー証明書を使ったVerifyを行うことなしにIO::SOCKET::SSLを利用したPerlスクリプトによるhttps通信を行うには、次のような方法があります。