Search code examples
javasslhttpsjettyself-signed

Self Signed Certificate - Can't access relative links from client


I'm running jetty on linux, and using ssl. I have a self signed certificate, and everything works fine in the browser; I just need to tell the browser to trust the certificate since it's from an untrusted source. But if I try to access a link (like an image; https://www.xxxx.com/pictures/picture.jpg) from my web application, it gives me an error:

07/16 08:14:28.708 WARN  [log] () EXCEPTION
javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
    at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1959)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1077)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
    at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:631)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:522)

I think I need to get the client to trust the self signed certificate. I've tried this:

Using keytool, create a certificate for the broker:

keytool -genkey -alias broker -keyalg RSA -keystore broker.ks

Export the broker's certificate so it can be shared with clients:

keytool -export -alias broker -keystore broker.ks -file broker_cert

Create a certificate/keystore for the client:

keytool -genkey -alias client -keyalg RSA -keystore client.ks

Create a truststore for the client, and import the broker's certificate:

keytool -import -alias broker -keystore client.ts -file broker_cert

And I include these when I start Jetty:

javax.net.ssl.keyStore=/path/to/client.ks

javax.net.ssl.keyStorePassword=password

javax.net.ssl.trustStore=/path/to/client.ts


I made sure jetty uses the certificate I generated through browser. What am I missing?


Solution

  • Purchased a certificate for the server, that solved the problem.