Rob, so even if I setup all of the javax.net.ssl.keystore etc... properties, they don't apply to the Http call?
On Wed, Feb 4, 2015 at 1:54 PM, Trevor Donaldson <[email protected]> wrote: > I imported the certificate plus I loaded all the system properties. I am > not sure if it has something to do with how > DatasetAccessorFactory.createHttp works, specifically how, the Http > connection is made. > > On Wed, Feb 4, 2015 at 1:33 PM, Trevor Donaldson <[email protected]> > wrote: > >> no the keystore approach did not work for me. I am not sure why it didn't >> work. It is only causing a problem with Java App->Fuseki (inside tomcat ssl >> container) >> >> On Wed, Feb 4, 2015 at 12:57 PM, Rob Vesse <[email protected]> wrote: >> >>> Trevor >>> >>> Did the key store approach not work for you? >>> >>> That is the preferred approach as the code approach you've used >>> essentially removes any SSL security from your application and makes it >>> vulnerable to man in the middle attacks >>> >>> Rob >>> >>> On 04/02/2015 08:10, "Trevor Donaldson" <[email protected]> wrote: >>> >>> >In case anyone else is struggling with this. I had to go with the method >>> >that Rob described here >>> > >>> > >>> https://github.com/rvesse/sparql-query-bm/blob/master/cmd/src/main/java/ne >>> >t/sf/sparql/benchmarking/commands/AbstractCommand.java#L444 >>> > >>> >More specifically trusting all certificates. >>> > >>> >On Tue, Feb 3, 2015 at 8:19 PM, Rob Vesse <[email protected]> wrote: >>> > >>> >> As I suggested based on your original description this error does >>> indeed >>> >> mean that the certificate is not trusted. Either it is a self-signed >>> >> certificate OR there is an untrusted certificate/certificate authority >>> >>in >>> >> the certificate chain >>> >> >>> >> You should not need to pass a SSLContext to anything in order to >>> resolve >>> >> this. >>> >> >>> >> Configuring the key store on your machine to trust the relevant >>> >> certificate(s) is a JVM level feature and will be sufficient in most >>> >> cases. The key store is automatically discovered by the JVM and used >>> by >>> >> higher level libraries like Apache HTTP Client (which underpins all >>> HTTP >>> >> functionality in ARQ). >>> >> >>> >> Rob >>> >> >>> >> On 03/02/2015 16:25, "Trevor Donaldson" <[email protected]> wrote: >>> >> >>> >> >Thanks Rob. Apologies for not adding some of the stacktrace. Here is >>> >>the >>> >> >error. >>> >> > PKIX path building failed: >>> >> >sun.security.provider.certpath.SunCertPathBuilderException: unable to >>> >>find >>> >> >valid certification path to requested target >>> >> > >>> >> >DatasetAccessor datasetAccessor = DatasetAccessorFactory.createHTTP(" >>> >> >https://localhost:8443/ds"); >>> >> > >>> >> >I believe I may have to pass the HttpAuthenticator with an >>> SSLContext. >>> >>Not >>> >> >sure how the DatasetAccessorFactory "knows" about my keystore and >>> >> >truststore. >>> >> > >>> >> >On Tue, Feb 3, 2015 at 6:38 PM, Rob Vesse <[email protected]> >>> wrote: >>> >> > >>> >> >> Trevor >>> >> >> >>> >> >> An invalid certificate exception generally means that the >>> >>certificate is >>> >> >> not trusted (often because it is self-signed) but without seeing a >>> >> >> specific error condition and stack trace we can only guess what the >>> >> >>actual >>> >> >> problem is. >>> >> >> >>> >> >> Generally I would not expect it to be a HttpAuthenticator specific >>> >> >>problem >>> >> >> but again without a stack trace we can only speculate. You can use >>> >>the >>> >> >> debugging support (basically appropriately configuring logging) if >>> >>you >>> >> >> want to see exactly what Apache HTTP Client is doing under the >>> hood: >>> >> >> >>> >> >> >>> >> >> >>> >> >>> >> >>> https://jena.apache.org/documentation/query/http-auth.html#debugging-auth >>> >> >>en >>> >> >> tication >>> >> >> >>> >> >> Trusting a certificate that would otherwise not be trusted is >>> >>generally >>> >> >>a >>> >> >> JVM specific task and requires you to either configure the JVM key >>> >>store >>> >> >> on each machine your client runs on appropriately OR do some nasty >>> >>code >>> >> >> hacks that essentially disables SSL certificate verification in >>> your >>> >> >>JVM. >>> >> >> For example the following SO question shows both approaches: >>> >> >> >>> >> >> >>> >> >> >>> >> >>> >> >>> http://stackoverflow.com/questions/2893819/telling-java-to-accept-self-si >>> >> >>gn >>> >> >> ed-ssl-certificate >>> >> >> >>> >> >> I have some helper scripts that I've used in the past up on >>> BitBucket >>> >> >>that >>> >> >> can help automate the key store management because it is a little >>> >> >>esoteric >>> >> >> if you've never had to do it before: >>> >> >> >>> >> >> https://bitbucket.org/rvesse/java-ssl-helper/overview >>> >> >> >>> >> >> Note that under some JVMs using this approach may not help (IBM V9 >>> >>was >>> >> >> problematic if memory serves) and you may need to use the code >>> >>approach >>> >> >> instead. See the following code where I've done this in a tool >>> that >>> >> >>uses >>> >> >> ARQ and HttpAuthenticator's in the past: >>> >> >> >>> >> >> >>> >> >> >>> >> >>> >> >>> https://github.com/rvesse/sparql-query-bm/blob/master/cmd/src/main/java/n >>> >> >>et >>> >> >> /sf/sparql/benchmarking/commands/AbstractCommand.java#L444 >>> >> >> >>> >> >> Rob >>> >> >> >>> >> >> >>> >> >> On 03/02/2015 12:49, "Trevor Donaldson" <[email protected]> >>> wrote: >>> >> >> >>> >> >> >Is it possible to setup an ssl context using HttpAuthenticator? I >>> am >>> >> >> >getting an invalid certificate exception when I try to use >>> >> >>DataSetFactory. >>> >> >> >I believe this is because the actual call is not using SSL. >>> >> >> > >>> >> >> >Thanks >>> >> >> >>> >> >> >>> >> >> >>> >> >> >>> >> >> >>> >> >>> >> >>> >> >>> >> >>> >> >>> >>> >>> >>> >>> >> >
