Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 94035200D4B for ; Mon, 27 Nov 2017 17:32:44 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 92B16160C13; Mon, 27 Nov 2017 16:32:44 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 620E5160BFA for ; Mon, 27 Nov 2017 17:32:43 +0100 (CET) Received: (qmail 92847 invoked by uid 500); 27 Nov 2017 16:32:41 -0000 Mailing-List: contact users-help@tomcat.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Tomcat Users List" Delivered-To: mailing list users@tomcat.apache.org Received: (qmail 92836 invoked by uid 99); 27 Nov 2017 16:32:41 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 27 Nov 2017 16:32:41 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id 8A126180164 for ; Mon, 27 Nov 2017 16:32:40 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 2.379 X-Spam-Level: ** X-Spam-Status: No, score=2.379 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=2, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_SORBS_SPAM=0.5, SPF_PASS=-0.001] autolearn=disabled Authentication-Results: spamd3-us-west.apache.org (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id E2TQnMFyPsFt for ; Mon, 27 Nov 2017 16:32:32 +0000 (UTC) Received: from mail-ot0-f180.google.com (mail-ot0-f180.google.com [74.125.82.180]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTPS id 414185F23C for ; Mon, 27 Nov 2017 16:32:32 +0000 (UTC) Received: by mail-ot0-f180.google.com with SMTP id s4so24709065ote.4 for ; Mon, 27 Nov 2017 08:32:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=crNvMa3jp8P2wVGQFjcrkjS5xJHI/izOK148HWA+6I8=; b=k+kVAG5p0qScuhFzhAHFXVTVejHCKjHxFXrznzUWGNcZPnkgDlJaAPQmqNIqx/gUM+ 6otMIy7HpSWUuf0EsV6WKuhTrVC9ZEB9j4DtMghYpHo2AldviwzS1KngwMzYCsetO4KK y+TEy2jGDiUo+NPAiwdYVMY75PlR7CaZritjX+gxZVtcaMroO28pJFPDiEY4UBFFU3L5 kGtOS/sHm6pBCYJaQVA9SPrx5eCekKfwP89/J7oMzxpQiTCpfvgZW6o5Rh+KcR+AEyJg 0lrniOiE80cCFZ4+5p7nJs0g/usjRNnSMDNYwOQNnl2loCwCbk13Wo+UeZyZOtlymOYb 5DOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=crNvMa3jp8P2wVGQFjcrkjS5xJHI/izOK148HWA+6I8=; b=hdcmsUJuTL0PRrX9N7LrFW1tr0bWnrX0b3dWv0Ht3hUE4FV96FGoDDndQ9UbivfIzI NAWAZgjPs/9tiBez4m4b86E4R6Mstl0dTC2JGZUZQpSGJPEHOx6WSILta2AlSnV3L9fI v04vLbdjdi032bOZCLMmaXVdwswA2P+T9ril7GqGxI1k6L3tedYjpc6pe9zIfz7m+px8 9ylyhuksYvTtGEfaQel/K15fY0xuRkxrahLII45CPPbRomAv8CcRtpk4dXkm5v1+Irxa GFTYoxmgRo22VK3WBZtp17/5oRszc4KGMlLuyBiEQeIEdYohOfIrRDuuCBqQZmWCBBoN yn0A== X-Gm-Message-State: AJaThX7BSN7F1w6auXJu6wEdDBLDrr9YNeQ/I5J78FTZFDacod40B5Wm 3e9XGL26Nd/Hj7H7gQiIGGg3E2NjpHhs2VrUkUU= X-Google-Smtp-Source: AGs4zMaZzRpxdt5PRx8+2wiuw/7Wgd1AKrRda9+zjPxvp1QyPVzocPDtF9FXs8xDBp7iWT+sVHDAj09ZPLaQOT6enX8= X-Received: by 10.157.80.135 with SMTP id b7mr26734771oth.89.1511800351346; Mon, 27 Nov 2017 08:32:31 -0800 (PST) MIME-Version: 1.0 Received: by 10.74.187.142 with HTTP; Mon, 27 Nov 2017 08:32:30 -0800 (PST) In-Reply-To: References: <86948fef-641e-22ee-94a1-12501e98c071@christopherschultz.net> From: Joleen Barker Date: Mon, 27 Nov 2017 11:32:30 -0500 Message-ID: Subject: Re: Trying to understand How Tomcat uses Keystore for SSL To: Tomcat Users List Content-Type: multipart/alternative; boundary="f4030435ac8ce9d538055ef972e5" archived-at: Mon, 27 Nov 2017 16:32:44 -0000 --f4030435ac8ce9d538055ef972e5 Content-Type: text/plain; charset="UTF-8" Perfect. Thank you for the clarification I was having a problem putting it all together. I got it now. -Joleen On Mon, Nov 27, 2017 at 10:47 AM, Don Flinn wrote: > Hi Joleen, > > My previous mail was cryptic. Below is a fuller explanation of what I did > to get things running. > > First, I'm using Tomcat 9 and the protocol for the Tomcat 8.5 and up has > been expanded. Chris suggested that I use PKCS12 rather than JDK keystore, > which I have done. I'm also using the APR configuration. So redirected > connector that I'm using looks like: > > protocol="org.apache.coyote.http11.Http11NioProtocol" > port="8443" maxThreads="150" SSLEnabled="true"> > > > keystoreType="PKCS12" > certificateFile="C:/users/don/Security/domain-chain.crt" > certificateChainFile="C:/users/don/Security/ICDTrustRoot.crt" > type="RSA" /> > > > > > The domain key is the private key I used when getting the certificates from > letsencrypt. The certificate I got from letsencrypt I called > domain-chain.crt. Lastly I downloaded the ICDTrustRoot.crt from the > letsencrypt at https://letsencrypt.org/certificates. You will notice that > I'm using Window's syntax, which is just for the pathname where the > certificates live. You would use a Linux path syntax if you are running > Linux. You need three certificates for letsencrypt; a cert for your > domain, one for the intermediate and finally the root certificate. > > What I call domain-chain.crt holds two certificates; my domain certificate > and the intermediate. In order to see what these were I separated them in > a text editor and called them domaincert1.crt and the second > domaincert2.crt > Then I used openssl to see what was in them. For example: > > openssl x509 -noout -subject -issuer -in domaincert1.crt > this printed out > subject= /CN=info.finwoks.com > issuer= /C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3 > > So that one was my domain cert issued by the letsencrypt intermediate > > The second one certificate gave > subject= /C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3 > issuer= /O=Digital Signature Trust Co./CN=DST Root CA X3 > > which is the intermediate. > > I downloaded the certificates using the java program mentioned in my > previous e-mail. Depending on your particular setup, you can get the four > items using different methods. I would suggest that you check what the > various certificates contain by using the ssl commands. I've also read that > the order of the certificates should be > > Your domain > Intermediate > Known Root > > So that's the order I used. A caution, in my reading I have found some > directions not to be accurate. > > If what I have written is not clear, please let me know and I'll try to > clear it up. > > Don > > > > > On Mon, Nov 27, 2017 at 5:52 AM, Joleen Barker > wrote: > > > Hello Don, > > > > I'm trying to understand these as well. I had a question regarding the > data > > and commands you used to display the certificate information. You wrote > > that you used the following command to create a pkcs12 store: > > > > openssl pkcs12 -export -in "domain-chain.crt" -inkey "domain.key" > -certfile > > "ICDTrustRoot.crt" -out "MM.p12" -name tomcat -passout "pass:changeit" > > > > To display the 2 certs you show one example command to see the first one > > as: > > > > openssl x509 -noout -subject -issuer -in domaincert1.crt subject= /CN= > > info.finwoks.com issuer= /C=US/O=Let's Encrypt/CN=Let's Encrypt > Authority > > X3 > > > > Where did the "domaincert1.crt" come from? I did not see anything in the > > first command reference this and I was not sure how someone would know > this > > name and the second one called domaincert2.crt. > > > > Thank you, > > > > Joleen > > > > On Sun, Nov 26, 2017 at 10:35 PM, Don Flinn wrote: > > > > > IT WORKS!!!! > > > > > > My next question is whether the Tomcat team would want this Java > program > > > that does the heavy lifting for letsencrypt, which I would be happy to > > > clean up and make available as open source. The guts of the program > > comes > > > from - http://acme4j.shredzone.org, which is under the Apache > license. > > > > > > I've made a number of enhancements, e;g. a GUI front end; the ability > to > > do > > > the letsencrypt authorization without any user intervention; the > ability > > to > > > sit on an admin node retrieve and install the retrieved letsencrypt SSL > > > certificates on a remote tomcat node. > > > > > > If the answer is yes, let me know the procedure to make it available as > > > open sourcce. > > > > > > Don > > > > > > On Sun, Nov 26, 2017 at 4:54 PM, Don Flinn wrote: > > > > > > > Didn't read closely enough. The protocol that I used is no longer > > > > applicable for Tomcat 9. > > > > > > > > Don > > > > > > > > On Sun, Nov 26, 2017 at 3:15 PM, Don Flinn > wrote: > > > > > > > >> Chris > > > >> > > > >> Thank you for your excellent reply and references. > > > >> > > > >> I've been doing a lot of reading on SSL, certificates, keys, > > algorithms, > > > >> etc. Woo! However I still don't have it correct. > > > >> > > > >> I've retrieved certificates from letsencrypt and following your > > > >> suggestions did the following. > > > >> > > > >> Created a pkcs12 store using the following command line. > > > >> openssl pkcs12 -export -in "domain-chain.crt" -inkey "domain.key" > > > >> -certfile "ICDTrustRoot.crt" -out "MM.p12" -name tomcat -passout > > > >> "pass:changeit" > > > >> > > > >> where the domain-chain.crt contains two certificates and > ICDTrustRoot > > > >> contains one as shown below - > > > >> PS C:\users\don\security\letsenc5> openssl x509 -noout -subject > > -issuer > > > >> -in domaincert1.crt (the first cert in domain-chain.crt) > > > >> subject= /CN=info.finwoks.com > > > >> issuer= /C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3 > > > >> > > > >> PS C:\users\don\security\letsenc5> openssl x509 -noout -subject > > -issuer > > > >> -in domaincert2.crt (the second cert in domain-chain.crt) > > > >> subject= /C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3 > > > >> issuer= /O=Digital Signature Trust Co./CN=DST Root CA X3 > > > >> > > > >> PS C:\users\don\security\letsenc4> openssl x509 -noout -subject > > -issuer > > > >> -in ICDTrustRoot.crt > > > >> subject= /O=Digital Signature Trust Co./CN=DST Root CA X3 > > > >> issuer= /O=Digital Signature Trust Co./CN=DST Root CA X3 > > > >> so I have the three certificates and the private key which is shared > > > with > > > >> letsencrypt called domain.key > > > >> My server.xml contains: > > > >> > > >> sslImplementationName="org.apache.tomcat.util.net. > > openssl.O > > > >> penSSLImplementation" > > > >> port="8443" maxThreads="200" > > > >> scheme="https" secure="true" SSLEnabled="true" > > keystoreType="PKCS12" > > > >> keystoreFile="/users/don/Security/MM.p12" > keystorePass="changeit" > > > >> clientAuth="false" sslProtocol="TLS" > > > >> /> > > > >> > > > >> However when I restart Tomcat is get the following error in the > Tomcat > > > >> error log and of course it fails in the handshake with the browser > > > >> > > > >> org.apache.catalina.core.StandardService.initInternal Failed to > > > >> initialize connector [Connector[HTTP/1.1-8443]] > > > >> org.apache.catalina.LifecycleException: Failed to initialize > > component > > > >> [Connector[HTTP/1.1-8443]] > > > >> at org.apache.catalina.util.LifecycleBase.init( > > LifecycleBase.java:112) > > > >> at org.apache.catalina.core.StandardService.initInternal(Standa > > > >> rdService.java:549) > > > >> at org.apache.catalina.util.LifecycleBase.init( > > LifecycleBase.java:107) > > > >> at org.apache.catalina.core.StandardServer.initInternal(Standar > > > >> dServer.java:873) > > > >> at org.apache.catalina.util.LifecycleBase.init( > > LifecycleBase.java:107) > > > >> at org.apache.catalina.startup.Catalina.load(Catalina.java:606) > > > >> at org.apache.catalina.startup.Catalina.load(Catalina.java:629) > > > >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > > >> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) > > > >> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) > > > >> at java.lang.reflect.Method.invoke(Unknown Source) > > > >> at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:311) > > > >> at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:494) > > > >> Caused by: java.lang.UnsatisfiedLinkError: > > > org.apache.tomcat.jni.Pool.cre > > > >> ate(J)J > > > >> at org.apache.tomcat.jni.Pool.create(Native Method) > > > >> at org.apache.tomcat.util.net.openssl.OpenSSLEngine.(Op > > > >> enSSLEngine.java:75) > > > >> at org.apache.tomcat.util.net.openssl.OpenSSLUtil.getImplemente > > > >> dProtocols(OpenSSLUtil.java:61) > > > >> at org.apache.tomcat.util.net.SSLUtilBase.( > SSLUtilBase.java:46) > > > >> at org.apache.tomcat.util.net.openssl.OpenSSLUtil.(OpenSS > > > >> LUtil.java:41) > > > >> at org.apache.tomcat.util.net.openssl.OpenSSLImplementation.get > > > >> SSLUtil(OpenSSLImplementation.java:36) > > > >> at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSs > > > >> l(AbstractJsseEndpoint.java:82) > > > >> at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint. > java:261) > > > >> at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEnd > > > >> point.java:798) > > > >> at org.apache.coyote.AbstractProtocol.init( > AbstractProtocol.java:547) > > > >> at org.apache.coyote.http11.AbstractHttp11Protocol.init(Abstrac > > > >> tHttp11Protocol.java:66) > > > >> at org.apache.catalina.connector.Connector.initInternal(Connect > > > >> or.java:1010) > > > >> at org.apache.catalina.util.LifecycleBase.init( > > LifecycleBase.java:107) > > > >> ... 12 more > > > >> > > > >> I'm running Tomcat 9 in Amazon Web services using Windows Server. I > > > >> don't know what I'm doing wrong. Further help will be appreciated. > It > > > >> appears I have the pkcs12 wrong. > > > >> > > > >> Don > > > >> > > > >> On Tue, Nov 14, 2017 at 4:33 PM, Christopher Schultz < > > > >> chris@christopherschultz.net> wrote: > > > >> > > > >>> -----BEGIN PGP SIGNED MESSAGE----- > > > >>> Hash: SHA256 > > > >>> > > > >>> Don, > > > >>> > > > >>> On 11/14/17 1:57 AM, Don Flinn wrote: > > > >>> > I've done some reading on SSL and understand the protocol is as > > > >>> > follows; Client/Browser sends ClientHello and server Tomcat > replies > > > >>> > with ServerHello. This establishes the protocol they will use. > The > > > >>> > server then sends the certificate and the public key - in the > > > >>> > clear The browser encrypts a message containing the servers > domain, > > > >>> > all encrypted with the server's public key to the CA which the > > > >>> > browser trusts. The public key is in the certificate. The CA > > > >>> > de-crypts the message with the server's private key. So the > > > >>> > server's name/ domain must be not encrypted. If the server can > > > >>> > decrypt the message it knows the server and it then sends a ack > > > >>> > message back to the browser encrypted with the client's private > > > >>> > key. > > > >>> > > > >>> Most of that is correct (enough) except for the last part: the > server > > > >>> never has the client's private key. The handshake is done using > > > >>> public-key/asymmetric encryption and part of that handshake > includes > > > >>> establishing the keys to be used for the bulk encryption -- the > > > >>> encryption used after the handshake. > > > >>> > > > >>> > The browser and Tomcat then establish a secret key to send > messages > > > >>> > back and forth. > > > >>> > > > >>> That's the bulk encryption key. Note that it can be re-negotiated > at > > > >>> intervals during the conversation if necessary. > > > >>> > > > >>> > If I have the above correct, I must have keystore set up > > > >>> > incorrectly, since running my scenario I get an error in the > Chrome > > > >>> > debugger,which says > > > >>> > > > > >>> > This page is not secure "Valid certificate The connection to this > > > >>> > site is using a valid, trusted server certificate issued by > unknown > > > >>> > name. Secure resources All resources on this page are served > > > >>> > securely. " > > > >>> > > > > >>> > Note the 'the certificate is valid and it is issued by unknown > > > >>> > name" Why is the issuer unknown, since the issuer's name is in > the > > > >>> > certificate? > > > >>> > > > >>> That message may be misleading. If the certificate is self-signed > > than > > > >>> of course the certificate signer is "known" to the client (Chrome) > > > >>> because it's just identified itself (as itself!). What it means to > be > > > >>> "unknown" is that it is /untrusted/. You haven't told Chrome that > you > > > >>> specifically trust the certificate that signed the server's > > > >>> certificate. If you e.g. self-sign then the self-signature isn't > > > >>> recognized as authoritative. If a real CA signs it -- e.g. > Verisign, > > > >>> DigiCert, Let's Encrypt, etc. -- then the browser /will/ recognize > > it. > > > >>> > > > >>> > letsencrypt has an online web site from which one can download a > > > >>> > ca_bundle, a private key and a certificate for your domain > > > >>> > > > >>> Theoretically, you should generate your own private key and then > use > > > >>> LE's tools to obtain a signed certificate. > > > >>> > > > >>> > Oracle has an article on keytool which says that keytool can not > > > >>> > create a pkcs12 keystore but can read it and to use openssl, > which > > > >>> > I did following their instructions. > > > >>> > > > >>> OpenSSL will do DER/PEM files and also PKCS12 keystores, but they > are > > > >>> interchangeable and contain the same types of key material... just > in > > > >>> different kinds of packages. > > > >>> > > > >>> > Concatenate the CA cert, the private key and the user cert then > put > > > >>> > these in keystore. > > > >>> > > > >>> Be careful with terms. Concatenation usually means just slamming > > bytes > > > >>> together. This only works with PEM-encoded files like OpenSSL likes > > to > > > >>> use -- the ones that start with e.g. "---- BEGIN CERTIFICATE ----". > > > >>> The other types of files have a very specific format and you can't > > > >>> just slam them together. > > > >>> > > > >>> > The result is shown below. Tomcat isn't able to use this > keystore > > > >>> > to communicate with the browser for some reason. Why? What's > > > >>> > missing or incorrect? > > > >>> > > > > >>> > C:\Users\don\Security\letsenc>%keytool% -list -keystore > MMcert.p12 > > > >>> > -v -storetype pkcs12 Enter keystore password: > > > >>> > > > > >>> > Keystore type: PKCS12 Keystore provider: SunJSSE > > > >>> > > > > >>> > Your keystore contains 1 entry > > > >>> > > > > >>> > Alias name: tomcat Creation date: Nov 13, 2017 Entry type: > > > >>> > PrivateKeyEntry > > > >>> > > > >>> So this is one of the things that makes me angry about keytool: it > > > >>> tells you there is only a single entry in the keystore and tells > you > > > >>> that it's a "private key". Well... there is also a certificate in > > > >>> there and it's got signatures on it and stuff. I'd count that as at > > > >>> least 2 items. Anyway... > > > >>> > > > >>> > Certificate chain length: 1 Certificate[1]: Owner: > > > >>> > CN=info.finwoks.com > > > >>> > > > >>> Okay, this is traditionally called the "subject": > info.finworks.com. > > > >>> This is *your certificate*, usually called the "server > certificate". > > > >>> It's usually the last link in a chain of trust going from the CA > down > > > >>> to the server cert. > > > >>> > > > >>> > Issuer: CN=Let's Encrypt Authority X3, O=Let's Encrypt, C=US > > > >>> > > > >>> Good: you have a certificate that has been issued (aka signed) by > > > >>> Let's Encrypt. > > > >>> > > > >>> You appear to be missing the Let's Encrypt intermediate certificate > > in > > > >>> your keystore, which will be required for most browsers to trust > the > > > >>> certificate (chain). > > > >>> > > > >>> Might I recommend using Qualys's fine SSL server test tool: > > > >>> https://www.ssllabs.com/ssltest/ > > > >>> > > > >>> It probably would have told you that you have a single certificate > in > > > >>> your chain and that you need to have an intermediate certificate. > > > >>> > > > >>> It turns out that it's fairly easy to fix this: just import LE's > > > >>> intermediate certificate into your keystore, like this: > > > >>> > > > >>> $ keytool -import -alias [Authority.intermediate] -trustcacerts \ > > > >>> -file [authority's intermediate cert file] \ > > > >>> -keystore yourkeystore.jks > > > >>> > > > >>> Once you add this certificate, you will likely have to restart > Tomcat > > > >>> to pick-up the changes. > > > >>> > > > >>> You can do this in a single operation to convert from the > PEM-encoded > > > >>> files that LE gives to you into a PKCS12 package like this: > > > >>> > > > >>> $ openssl pkcs12 -export -in "${LE_BASE}/cert.pem" \ > > > >>> -inkey "${LE_BASE}/privkey.pem" \ > > > >>> -certfile "${LE_BASE}/fullchain.pem" \ > > > >>> -out "${CATALINA_BASE}/${HOSTNAME}.p12" -name tomcat \ > > > >>> -passout "pass:changeit" > > > >>> > > > >>> Note that this command imports all 3 items (server key, server > > > >>> certificate, and CA intermediate certs) into a single PKCS12 > bundle. > > > >>> Then you can convert that into a Java keystore. Or just use PKCS12 > as > > > >>> your keystore type from Tomcat and avoid the use of keytool > > altogether. > > > >>> > > > >>> You might find these two presentations informative: > > > >>> http://people.apache.org/~markt/presentations/2017-05- > > > 16-b-tomcat-ssl.pd > > > >>> f > > > >>> > > 16-b-tomcat-ssl.pdf> > > > >>> > > > >>> http://people.apache.org/~schultz/ApacheCon%20NA%202017/ > > > Let's%20Encrypt% > > > >>> 20Apache%20Tomcat.pdf > > > >>> > > Let's%20Encrypt%20Apache%20Tomcat.pdf> > > > >>> > > > >>> Hope that helps, > > > >>> - -chris > > > >>> -----BEGIN PGP SIGNATURE----- > > > >>> Comment: GPGTools - http://gpgtools.org > > > >>> Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ > > > >>> > > > >>> iQJRBAEBCAA7FiEEMmKgYcQvxMe7tcJcHPApP6U8pFgFAloLYUYdHGNocmlzQGNo > > > >>> cmlzdG9waGVyc2NodWx0ei5uZXQACgkQHPApP6U8pFjtxRAAisLpBKPg9VFN5dPH > > > >>> tEeZQs7Bd6hM3NDBjRXE7RYAJhvBlOE2ImDkWXjRkJGedf00nTTQly6zKWHrusbC > > > >>> VlJMoEK+T72XeJIv2y5up3K+VmartQZLK6twMCqDEVZBv0gaEz1T7yfe6WC6/G4W > > > >>> oqGCkcDAF61P2u0K4QXldXBl1I83VCfEWWGpI7Bc1/5u7c/SE3kEN0D/V8Gs0H1r > > > >>> 8/LF2MzPSpGoJqSuRhyPWzklaK/ks+LSv1d7ur+ZrHHobSeMFtIHuhk6KakbheIL > > > >>> 3APEHZw3vHv70SFjvhviYg873CYOT52/x8zfzqpxc1z3X9JC/hAqzZUL7qKHPSMd > > > >>> bbWTSu8Tv7XWARe2BdyRQDKFJSTPnUNFxvyWviekNK5HkJx2sSgcH8iiTJN5lrMQ > > > >>> uEDZ4RukyT/b3VWn0RWtqvHnxZrLmXjWyV3MWNPFI0LYNuorJu6cROy4WnO7NFOV > > > >>> dmvDKC79qJ/XOziOmaGKgL11hNGwqYB2pn/aS7G+VCLCG0UGp8B/64j/5mNd9BL5 > > > >>> a4DZXmonIPoKhjO/OP5H7hte2uqQAprrQgVI1JzKlYAb6wV+f4123nctlM+UeFBM > > > >>> ytYYVpwyD/TXxeVr0SnmNpOlyPHnO6RRXPXfmiNEbdsjMef+Inljc4DlcLnlbdvK > > > >>> Fc/zRGoUIB8+LN0T8NxVvXMAGGc= > > > >>> =IHty > > > >>> -----END PGP SIGNATURE----- > > > >>> > > > >>> ------------------------------------------------------------ > > --------- > > > >>> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org > > > >>> For additional commands, e-mail: users-help@tomcat.apache.org > > > >>> > > > >>> > > > >> > > > > > > > > > > --f4030435ac8ce9d538055ef972e5--