Shunshun94 / discord-bcdicebot

BCDice bot for Discord
GNU General Public License v3.0
20 stars 16 forks source link

証明書有効期限切れにも対応する #60

Closed Shunshun94 closed 4 years ago

Shunshun94 commented 4 years ago
14:46:19.800 [Javacord - Central ExecutorService - 498] WARN com.hiyoko.discord.bot.BCDice.BCDiceBot - Failed to reply to user request
java.io.IOException: RESTEASY004655: Unable to invoke request(https://bcdice-api.conos.jp/v1/diceroll?command=2%E7%82%B9%E3%81%97%E3%81%8B%E5%8F%97%E3%81%91%E3%81%A6%E3%81%AA%E3%81%84%E3%82%A6%E3%83%AB%E3%83%95%E3%81%AB%E4%BA%8C%E9%80%A3%E6%92%83&system=SwordWorld2.5)
        at com.hiyoko.discord.bot.BCDice.DiceClient.BCDiceClient.getUrl(BCDiceClient.java:73)
        at com.hiyoko.discord.bot.BCDice.DiceClient.BCDiceClient.getUrl(BCDiceClient.java:81)
        at com.hiyoko.discord.bot.BCDice.DiceClient.BCDiceClient.getUrl(BCDiceClient.java:81)
        at com.hiyoko.discord.bot.BCDice.DiceClient.BCDiceClient.getUrl(BCDiceClient.java:81)
        at com.hiyoko.discord.bot.BCDice.DiceClient.BCDiceClient.getUrl(BCDiceClient.java:81)
        at com.hiyoko.discord.bot.BCDice.DiceClient.BCDiceClient.getUrl(BCDiceClient.java:81)
        at com.hiyoko.discord.bot.BCDice.DiceClient.BCDiceClient.getUrl(BCDiceClient.java:118)
        at com.hiyoko.discord.bot.BCDice.DiceClient.BCDiceClient.rollDice(BCDiceClient.java:147)
        at com.hiyoko.discord.bot.BCDice.DiceClient.BCDiceClient.rollDiceWithChannel(BCDiceClient.java:143)
        at com.hiyoko.discord.bot.BCDice.BCDiceCLI.roll(BCDiceCLI.java:300)
        at com.hiyoko.discord.bot.BCDice.BCDiceCLI.rolls(BCDiceCLI.java:279)
        at com.hiyoko.discord.bot.BCDice.BCDiceBot.lambda$null$1(BCDiceBot.java:85)
        at org.javacord.core.util.event.EventDispatcher.lambda$dispatchMessageCreateEvent$96(EventDispatcher.java:3446)
        at org.javacord.core.util.event.EventDispatcherBase.lambda$dispatchEvent$10(EventDispatcherBase.java:197)
        at org.javacord.core.util.event.EventDispatcherBase.lambda$checkRunningListenersAndStartIfPossible$17(EventDispatcherBase.java:265)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: javax.ws.rs.ProcessingException: RESTEASY004655: Unable to invoke request
        at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.invoke(ApacheHttpClient4Engine.java:289)
        at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.invoke(ClientInvocation.java:454)
        at org.jboss.resteasy.client.jaxrs.internal.ClientInvocationBuilder.get(ClientInvocationBuilder.java:157)
        at com.hiyoko.discord.bot.BCDice.DiceClient.BCDiceClient.getUrl(BCDiceClient.java:67)
        ... 19 common frames omitted
Caused by: javax.net.ssl.SSLHandshakeException: PKIX path validation failed: java.security.cert.CertPathValidatorException: validity check failed
        at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131)
        at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:326)
        at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:269)
        at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:264)
        at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:645)
        at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate(CertificateMessage.java:464)
        at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume(CertificateMessage.java:360)
        at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:392)
        at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444)
        at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:422)
        at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:183)
        at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164)
        at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1144)
        at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1055)
        at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:395)
        at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:394)
        at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:353)
        at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:141)
        at org.apache.http.impl.conn.BasicHttpClientConnectionManager.connect(BasicHttpClientConnectionManager.java:338)
        at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
        at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
        at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
        at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
        at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
        at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
        at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.invoke(ApacheHttpClient4Engine.java:285)
        ... 22 common frames omitted
Caused by: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: validity check failed
        at java.base/sun.security.validator.PKIXValidator.doValidate(PKIXValidator.java:369)
        at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:275)
        at java.base/sun.security.validator.Validator.validate(Validator.java:264)
        at java.base/sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:313)
        at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:222)
        at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:129)
        at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:629)
        ... 45 common frames omitted
Caused by: java.security.cert.CertPathValidatorException: validity check failed
        at java.base/sun.security.provider.certpath.PKIXMasterCertPathValidator.validate(PKIXMasterCertPathValidator.java:135)
        at java.base/sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIXCertPathValidator.java:237)
        at java.base/sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIXCertPathValidator.java:145)
        at java.base/sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(PKIXCertPathValidator.java:84)
        at java.base/java.security.cert.CertPathValidator.validate(CertPathValidator.java:309)
        at java.base/sun.security.validator.PKIXValidator.doValidate(PKIXValidator.java:364)
        ... 51 common frames omitted
Caused by: java.security.cert.CertificateExpiredException: NotAfter: Sat Sep 21 15:19:49 UTC 2019
        at java.base/sun.security.x509.CertificateValidity.valid(CertificateValidity.java:274)
        at java.base/sun.security.x509.X509CertImpl.checkValidity(X509CertImpl.java:675)
        at java.base/sun.security.provider.certpath.BasicChecker.verifyValidity(BasicChecker.java:190)
        at java.base/sun.security.provider.certpath.BasicChecker.check(BasicChecker.java:144)
        at java.base/sun.security.provider.certpath.PKIXMasterCertPathValidator.validate(PKIXMasterCertPathValidator.java:125)
        ... 56 common frames omitted
Shunshun94 commented 4 years ago

https://github.com/Shunshun94/discord-bcdicebot/blob/v1.14/src/main/java/com/hiyoko/discord/bot/BCDice/DiceClient/BCDiceClient.java#L66-L83 ここで死んでいる

  1. リクエスト時に証明書無効の例外が吐かれて死ぬ
  2. クライアントサイドの問題と判断してリトライする
  3. しかし、実態はクライアントサイドではなくてサーバの証明書の問題だから無駄 → ダウン