Hi Christy, Thanks for reporting this issue with the HTTPS server example. This is now fixed in our SVN trunk. Best regards, Jerome Louvel -- Restlet ~ Founder and Lead developer ~ <http://www.restlet.org/> http://www.restlet.org Noelios Technologies ~ Co-founder ~ <http://www.noelios.com/> http://www.noelios.com
_____ De : Christy Ring [mailto:[EMAIL PROTECTED] Envoye : dimanche 17 aout 2008 21:27 A : [email protected] Objet : Re: SSL problem Thanks Bruno that worked, your a star ;-) Interestingly I'm still getting a keystore tamper error, but it works. See below. java -jar target/com.vennetics.jbox.fs.api-2.0-dist.dir/com.vennetics.jbox.fs.api-2.0. jar Exception in thread "main" java.io.IOException: Keystore was tampered with, or password was incorrect at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:768) at java.security.KeyStore.load(KeyStore.java:1150) at com.noelios.restlet.ext.simple.HttpsServerHelper.start(HttpsServerHelper.jav a:250) at org.restlet.Server.start(Server.java:383) at org.restlet.Component.startServers(Component.java:1176) at org.restlet.Component.start(Component.java:1137) at com.vennetics.jbox.fs.api.Main.main(Main.java:49) Aug 17, 2008 8:15:27 PM com.noelios.restlet.LogFilter afterHandle INFO: 2008-08-17 20:15:27 0:0:0:0:0:0:0:1%0 - - 8182 GET / - 404 330 - https://localhost:8182 Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_4; en-us) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1 - Looking at the Helper File its been generated by a keyStore.load call (see below) /* * If an SslContextFactory has been set up, its settings take priority * over the other parameters (which are otherwise used to build and * initialise an SSLContext). */ if (sslContextFactory == null) { final KeyStore keyStore = KeyStore.getInstance(getKeystoreType()); final FileInputStream fis = getKeystorePath() == null ? null : new FileInputStream(getKeystorePath()); final char[] password = getKeystorePassword() == null ? null : getKeystorePassword().toCharArray(); keyStore.load(fis, password); if (fis != null) { fis.close(); } I noticed in the changes.txt for Milestone 5 you did some updates to the sslContextFactory, is this relevant to the error message? Bruno thanks again for your help. I'm interested in documenting this, I think it would be useful to provide a cheatsheet for HTTPS / Basic Auth from scratch. There seems to be lots of helloworlds for REST, few examples with security. Where would be the most appropriate place to do this on the Restlet site or hosted by Vennetics and referenced from Restlet. Christy Ring [EMAIL PROTECTED] On 17 Aug 2008, at 17:32, Bruno Harbulot wrote: Hi Christy, Christy Ring wrote: I wasnt aware of the certificate issue, thanks. I've modified the keytool command to reflect the changes you suggest as follows, deleted the .keystore and recreated it. I assume this is all I have to do with the keystore to get up and running? keytool -genkey -keyalg RSA -dname "cn=www.vennetics.com <http://www.vennetics.com>, ou=JBox, o=Vennetics, c=GB" -alias vennetics -keypass jbox123 -keystore /Users/christyring/.keystore -storepass jbox123 Yes, this should be sufficient to generate a self-signed certificate, which may be enough depending on your requirements. This is likely to be a problem if you deploy it for a wide audience. Bruno do you have an application that you confirm this feature works with 1.1-M5? To test myself I modified the keystore, keystorePassword and keyPassword of the BasicHttpServer example that came with 1.1-M5 with my details, nothing else and ran this, it failed. I've pasted the code below with my changes. final File keystoreFile = new File("d:\\temp\\certificats", "myServerKeystore"); // Component declaring only one HTTPS server connector. final Component component = new Component(); component.getServers().add(Protocol.HTTPS, 8182); component.getDefaultHost().attach("/helloWorld", restlet); // Update component's context with keystore parameters. component.getContext().getParameters().add("keystorePath", "/Users/christyring/.keystore"); component.getContext().getParameters().add("keystorePassword", "jbox123"); component.getContext().getParameters().add("keyPassword", "jbox123"); I had missed something: now that the Contexts have been split, these settings should be configured in the Server context: Server server = component.getServers().add(Protocol.HTTPS, 8182); component.getDefaultHost().attach("/helloWorld", restlet); server.getContext().getParameters().add("keystorePath", "/Users/christyring/.keystore"); server.getContext().getParameters().add("keystorePassword", "jbox123"); server.getContext().getParameters().add("keyPassword", "jbox123"); That's certainly something we should clarify in the documentation [1][2]. I've just tried this with a test keystore on OSX with Restlet 1.1-M5 and it worked. Best wishes, Bruno. [1] http://wiki.restlet.org/docs_1.1/g1/13-restlet/29-restlet/99-restlet/46-rest let.html [2] http://wiki.restlet.org/docs_1.1/g1/43-restlet/153-restlet.html

