Portál AbcLinuxu, 2. května 2025 11:50

Tomcat a SSL

24.10.2010 18:43 | Přečteno: 1925× | Sieť | Výběrový blog | poslední úprava: 24.10.2010 19:17

Nedávno som riešil úlohu nastaviť webovú aplikáciu VitalQIP tak, aby fungovala len cez SSL. Aplikácia beží na Tomcat a ten pracuje aj ako webový server. Podnikový audítor vyžaduje použitie zabezpečeného pripojenia v každej webovej aplikácii. Serverový certifikát musí byť podpísaný podnikovou certifikačnou autoritou. Tento zápisok popisuje použitý postup, možno sa bude niekomu hodiť.

V prvom rade potrebujeme vytvoriť serverový certifikát. Tomcat si najlepšie rozumie s certifikátmi a kľúčmi vytvorenými pomocou javového nástroja keytool. Úložisko a kľúče spolu s ďalšími informáciami vytvoríme príkazom:

keytool -genkey -alias tomcat -keyalg RSA -keysize 2048 -validity 730 -keystore /opt/qip/tomcat/conf/tomcatkeystore
Enter keystore password:
Re-enter new password: 
What is your first and last name?
  [Unknown]:  moj-tomcat-server.firma.sk
What is the name of your organizational unit?
  [Unknown]:  Sieťové služby
What is the name of your organization?
  [Unknown]:  Firma
What is the name of your City or Locality?
  [Unknown]:  Mesto
What is the name of your State or Province?
  [Unknown]:  Štát
What is the two-letter country code for this unit?
  [Unknown]:  SK
Is CN=moj-tomcat-server.firma.sk, OU=Sieťové služby, O=Firma, L=Mesto, ST=Štát, C=SK correct?
  [no]:  yes

Enter key password for <tomcat> (RETURN if same as keystore password):

Toto by možno stačilo na základné zabezpečenie spojenia certifikátom podpísaným samým sebou. Lenže taký certifikát spôsobuje najrôznejšie varovania a výnimky v prehliadači. Preto treba certifikát podpísať dôveryhodnou autoritou, v tomto prípade podnikovou certifikačnou autoritou. V druhom kroku vytvoríme žiadosť o certifikát:

keytool -certreq -keyalg RSA -alias tomcat -keystore /opt/qip/tomcat/conf/tomcatkeystore -file moj-tomcat-server.csr
Súbor pošleme certifikačnej autorite na podpis. Spôsob podpisovania certifikátu je mimo rozsah tohto zápisku. Keď dostaneme späť podpísaný certifikát v súbore moj-tomcat-server.cer vo formáte base64, vložíme ho do úložiska príkazom:
keytool -import -alias tomcat -keystore /opt/qip/tomcat/conf/tomcatkeystore -file moj-tomcat-server.cer
V ďalšom kroku upravíme súbor tomcat/conf/server.xml tak, aby počúval na portoch 80 a 443 približne takto:
.
.
.
</GlobalNamingResources>

  <!-- Define the Tomcat Stand-Alone Service -->

<Service name="Catalina">

    <!-- Non-SSL Connector - Start -->
    
    <Connector port="80" 
               maxHttpHeaderSize="8192"
               maxThreads="150" 
               minSpareThreads="25"
               maxSpareThreads="75"
               enableLookups="false"
               redirectPort="443" 
               acceptCount="100"
               connectionTimeout="20000"
               disableUploadTimeout="true" />
        
   <!-- Non-SSL Connector - End -->
     
    <!-- SSL Connector - Start -->
   
   <Connector port="443"
              maxHttpHeaderSize="8192"
              maxThreads="150" 
              minSpareThreads="25" 
              maxSpareThreads="75"
              enableLookups="false"
              disableUploadTimeout="true"
              acceptCount="100"
              scheme="https"
              secure="true"
              clientAuth="false"
              sslProtocol="TLS"
              keystoreType="JKS"
              keystoreFile="/opt/qip/tomcat/conf/tomcatkeystore"
              keystorePass="verysecurepassword"/> 
          
    <!--  SSL Connector - End -->>
.
.
.
</Service>
A na záver treba zabezpečiť aby klient ktorý sa pripája na port 80 bol presmerovaný na port 443 cez zabezpečené spojenie. To sa docieli upravením súboru tomcat/conf/web.xml približne takto:
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
.
.
. 
   <security-constraint>
        <web-resource-collection>
            <web-resource-name>Entire Application</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        >/user-data-constraint>
    </security-constraint>

</web-app>
Užívateľ sa pripojí na http://moj-tomcat-server.firma.sk, je automaticky presmerovaný na https://moj-tomcat-server.firma.sk . Certifikát poskytnutý serverom je podpísaný dôveryhodnou autoritou, je automaticky overený v prehliadači a celá komukácia je zašifrovaná. Audítor môže byť spokojný.        

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

24.10.2010 20:32 Karel Benák | skóre: 8 | blog: benyho
Rozbalit Rozbalit vše Re: Tomcat a SSL
Odpovědět | Sbalit | Link | Blokovat | Admin
Docela pěkný návod. Tedy ne že by už dávno nebyl popsaný v dokumentaci k Tomcatu :-) Ale teď vážně. Pokud budeš mít svůj certifikát podepsaný od některé z našich (nebo SK) CA, měl bys importovat kompletní certifikační cestu do keystore, protože na 100% tam nebudou a některým aplikacím by se to nemuselo zrovna líbit. Faktem je, že málo aplikací pracujících s certifikáty dodržuje pravidla práce s cert. materiálem. A už vůbec je obrovská škoda, že zrovna české CA neposkytují OCSP protokol.
Láska je jako prd, když hodně tlačiš tak z toho bude ...
24.10.2010 22:07 Ján Chrastina | skóre: 4 | blog: Pavuk
Rozbalit Rozbalit vše Re: Tomcat a SSL
V tomto prípade reťazec certifikačných autorít nie je potrebný, funguje to aj bez neho. Ten by bol asi potrebný ak by sa robila autetifikácia klienta pomocou certifikátu. Vtedy by asi bolo treba vložiť koreňový certifikát a prípadne aj medzi-certifikát príkazmi:

keytool -import -alias tomcat -keystore /opt/qip/tomcat/conf/tomcatkeystore -trustcacerts -file firemnárootca.cer

keytool -import -alias tomcat -keystore /opt/qip/tomcat/conf/tomcatkeystore -trustcacerts -file firemnásubca.cer

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.