Skip to content

Can we gracefully handle CertPathValidatorException? #72

Description

@rob-bygrave
i.a.m.g.GraphiteReporter#performLog:116 - Error reporting metrics
javax.net.ssl.SSLHandshakeException: PKIX path validation failed: java.security.cert.CertPathValidatorException: validity check failed
	at java.base/sun.security.ssl.Alert.createSSLException(Unknown Source)
	at java.base/sun.security.ssl.TransportContext.fatal(Unknown Source)
	at java.base/sun.security.ssl.TransportContext.fatal(Unknown Source)
	at java.base/sun.security.ssl.TransportContext.fatal(Unknown Source)
	at java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.checkServerCerts(Unknown Source)
	at java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.onConsumeCertificate(Unknown Source)
	at java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.consume(Unknown Source)
	at java.base/sun.security.ssl.SSLHandshake.consume(Unknown Source)
	at java.base/sun.security.ssl.HandshakeContext.dispatch(Unknown Source)
	at java.base/sun.security.ssl.HandshakeContext.dispatch(Unknown Source)
	at java.base/sun.security.ssl.TransportContext.dispatch(Unknown Source)
	at java.base/sun.security.ssl.SSLTransport.decode(Unknown Source)
	at java.base/sun.security.ssl.SSLSocketImpl.decode(Unknown Source)
	at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(Unknown Source)
	at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
	at java.base/sun.security.ssl.SSLSocketImpl.ensureNegotiated(Unknown Source)
	at java.base/sun.security.ssl.SSLSocketImpl$AppOutputStream.write(Unknown Source)
	at java.base/java.io.OutputStream.write(Unknown Source)
	at io.avaje.metrics.graphite.DGraphiteSender.sendPayload(DGraphiteSender.java:194)
	at io.avaje.metrics.graphite.DGraphiteSender.send(DGraphiteSender.java:188)
	at io.avaje.metrics.graphite.DGraphiteSender.writeMetrics(DGraphiteSender.java:172)
	at io.avaje.metrics.graphite.DGraphiteSender.flush(DGraphiteSender.java:142)
	at io.avaje.metrics.graphite.DGraphiteReporter.report(DGraphiteReporter.java:30)
	at io.avaje.metrics.DScheduledTask.runTask(DScheduledTask.java:89)
	```

So in `DGraphiteSender.send()` we have retry. The thought is to potentially support a fallback socketFactory that allows expired certs, detect `java.security.cert.CertificateExpiredException` and go into a "fallback mode" using the "fallback socket factory", and log warn or error etc to get the issue addressed but in the meantime the metrics keep reporting.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions