To aid future searches, I wanted to follow up on the mailing list and make
sure you had worked through your problem.


On Tue, Aug 2, 2022 at 3:41 PM Paul Grey <[email protected]> wrote:

> Just tried out these (command line) steps; hope they work for you, too.
>
> (1) openssl s_client -connect localhost:8443 -showcerts
> This will dump a bunch of text to stdout.  You want to grab the text
> between these two text lines:
> -----BEGIN CERTIFICATE-----
> ...
> -----END CERTIFICATE-----
> ... and save that text to a file "trust.cer".
>
> (2) openssl x509 -in trust.cer -text
> This will verify that you got the right text.
>
> (3) keytool -importcert -keystore trust.jks -file trust.cer -alias 1
> This will create a JKS keystore that contains your certificate.  The
> command will ask for a password (twice to confirm); pick something easy.
>
> (4) Enter "Truststore Filename" (/full/path/to/trust.jks) , "Truststore
> Password", and "Truststore Type" (JKS) into your StandardSSLContextService
> properties.
>
> Cheers!
>
>
> On Tue, Aug 2, 2022 at 11:33 AM Nathan Gough <[email protected]> wrote:
>
>> That's right Russ, if you purchased a commercially signed certificate,
>> InvokeHTTP should work by default. With your self signed certificate, you
>> will need an SSL context service, and I believe you will need to insert the
>> self signed certificate into the trust store. I suggest using
>> KeystoreExplorer to create a trust store, import the self signed
>> certificate, save that trust store file and then point to that file in the
>> SSL context service. Let us know if you have issues with that part.
>>
>> The screenshot error message you sent is showing that InvokeHTTP does not
>> trust the remote server when it says 'unable to find valid certfiication
>> path to requested target' (a pretty confusing error in my opinion).
>>
>> X509 key/certs and key/trust store stuff is pretty tricky to understand
>> the first time around.
>>
>> Nathan
>>
>>
>> On Tue, Aug 2, 2022, 11:00 AM Russell Bateman <[email protected]>
>> wrote:
>>
>>> Yes, of course. And, therefore, *SSLContextService* is required was my
>>> conclusion. I see the point more clearly now, but my conclusion seems
>>> inescapable. To forego *SSLContextService* we would have to purchase a
>>> commercially signed certificate for use by Tomcat, right?
>>>
>>> I will experiment with just somehow injecting the self-signed
>>> certificate we created into the trust store certificate? --which I thought
>>> I had done already, but *SSLContextService* has steadfastly refused to
>>> accept anything I throw at it. (I reiterate that this is my first TLS
>>> rodeo; I have never had to do this kind of work before. I greatly
>>> appreciate your patience.)
>>>
>>> Russ
>>>
>>> On 8/1/22 19:03, Paul Grey wrote:
>>>
>>> 1.  You've instructed your browser to accept the (untrusted) certificate
>>> that is being presented by Tomcat.
>>> [image: untrusted.cert.png]
>>>
>>> 2. You've supplied the "--insecure" flag to curl.
>>> https://curl.se/docs/manpage.html#-k
>>>
>>> 3.  The NiFi equivalent to these two instructions is to provide a
>>> truststore, which contains a record specifying the certificate being served
>>> by your Tomcat server.
>>>
>>>
>>> On Mon, Aug 1, 2022 at 6:27 PM Russell Bateman <[email protected]>
>>> wrote:
>>>
>>>>
>>>> Okay. I'm hoping this is true, but it's not what I'm seeing. It's not
>>>> dawning on me yet what I'm doing wrong.
>>>>
>>>> 1. If I hit my service from a browser,
>>>> https://localhost:8443/mdht-restlet, I get its splash page.
>>>> 2. If I curl the splash page, I get it:
>>>> russ@tirion ~/sandboxes/mdht-restlet/src/test/resources/fodder/gold $
>>>> curl --insecure --request GET https://localhost:8443/mdht-restlet
>>>> --header 'Accept: text/plain'
>>>> HL7v3 CDA on-demand generation service using Model-driven Health Tools
>>>> (MDHT). The generator is up.
>>>>
>>>>         Manifest-Version: 1.0
>>>>     Implementation-Title: mdht-restlet
>>>>   Implementation-Version: 3.3.10-2
>>>>      Specification-Title: mdht-restlet
>>>> ...
>>>>
>>>> 2. However, if I try *InvokeHTTP* to POST, I get this: (
>>>> https://www.javahotchocolate.com/notes/nifi-images/invokehttp-error.png
>>>> )
>>>>
>>>>
>>>>
>>>>
>>>> On 8/1/22 09:26, Paul Grey wrote:
>>>>
>>>> I just checked a running NiFi, built locally from the main branch.  I
>>>> configured an InvokeHTTP processor to perform a GET request to "
>>>> https://www.google.com/";.  No "SSL Context Service" was configured.
>>>>
>>>> The request completed successfully, routing output to relationships
>>>> "RESPONSE" and "ORIGINAL".
>>>>
>>>> [image: InvokeHTTP-google.png]
>>>>
>>>> I would expect the same behavior on your NiFi instance.  If no
>>>> SSLContextService is supplied, the expectation is that the default JVM
>>>> truststore is used, and the "google.com" certificate is signed by a CA
>>>> trusted by the default truststore.  If this test case does not work for
>>>> you, I would verify the validity of the default truststore.  Another check
>>>> would be to perform this same test on a different machine running NiFi.
>>>>
>>>>
>>>> On Fri, Jul 29, 2022 at 10:28 AM Russell Bateman <[email protected]>
>>>> wrote:
>>>>
>>>>> Just a note (for later readers of this thread)...
>>>>>
>>>>> My experience now with this trick seems to say that, as long as
>>>>> "https" is in the URL, a *SSLContextService* must be supplied. As a
>>>>> URL with "https" and port number 8443 is the only way I have to engage TLS
>>>>> at the far end, I must live with *SSLContextService*'s requirements.
>>>>>
>>>>> On 7/26/22 19:17, Paul Grey wrote:
>>>>>
>>>>> leave the InvokeHTTP property SSLContextService blank.
>>>>>
>>>>>
>>>>>
>>>>
>>>

Reply via email to