Den här dokumentationen innehåller procedur för att installera, underhålla och administrera SSL-certifikat som möjliggör för säker kommunikation via https-protokollet mellan Weave och slutanvändare.
Installera certifikat
För att förenkla processen att lägga till nytt certifikat använder vi verktyget Portecle som kan hantera flera typer av certifikat och ajourföring av nyckelförråd. Den finns tillgänglig NKO-P-IKART01 under D:\program\portecle-1.11.
Portacle är ett Java-baserat program och startas genom kommandot:
..\jre1.8.0_251\bin\java.exe -jar portecle.jar
Där vi förutsätter att vi kör kommandot från D:\program\portecle-1.11
Nyckelförråd
Ett Nyckelförråd (Keystore) används av plattformen för att på ett säkert sätt spara privata nycklar, certifikat och symmetriska nycklar. I kontexten förmedlas säker kommunikation vis SSL/TLS med det installerade certifikatet som garant att vi är den vi utger oss att vara. I detta fall interngis.nacka.se. Certifikatet är i regel giltigt under 12 månader i taget.
Skapa nytt nyckelförråd
Om inget nyckelförråd finns tillgänglig sedan tidigare kan ett nytt skapas. Befintligt nyckelförråd ska finnas på följande sökväg: D:\program\weave_2.6\jetty_base\etc\jetty.jks
Om nyckelförrådet redan existerar, fortsätt till Lägga till nytt certifikat
Öppna Portecle och välj File -> “New Keystore…”
Välj “JKS” som format.
Välj File -> “Save Keystore As…”
Skriv in lösenord som ska gälla för nyckelförrådet och välj OK. Spara lösenordet, det kommer användas i konfigurationen för SSL.
Spara lösenordet i katalogen
D:\program\weave_2.6\jetty_base\etc\
och med namnetjetty.jks
Lägga till certifikat
Att lägga till ett nytt certifikat sker i två steg. Dels en konvertering av formatet (.pfx) av certifikatet till ett format som kan importeras i nyckelförrådet samt importen av certifikatet.
Konvertera certifikatet
Öppna Portecle och välj File -> “Open Keystore file…”
Navigera till katalogen där certifikatet (exempelvis
star_nacka_se_2024-2025_w_certchain.pfx
) finns och öppna det.Fyll i eventuellt lösenord för certifikatet och välj OK. När certifikatet öppnats ska det finnas en rad.
Högerklicka på raden och välj “export”
Välj “Private Key and Certificate“ som Export Type och “PKCS#12“ som Export Format.
Fyll i eventuellt lösenord för certifikatet på nytt och välj OK.
Välj nytt lösenord och bekräfta det för certifikatet som ska exporteras och välj OK. Spara lösenordet, det används vid importen av certifikatet.
Spara certifikatet, exempelvis
nacka_se_Thawte_TLS_RSA_CA_G.p12
Exporten är klar
Importera certifikat
När certifikatet har konverterats kan vi importera det i vårt nyckelförråd.
För att inte riskera att nuvarande nyckelförråd blir förvanskad av oförutsedd händelse, rekommenderas backup av filen innan ändring.
Öppna Portecle och välj File -> “Open Keystore file…”. Öppna befintligt nyckelförråd,
D:\program\weave_2.6\jetty_base\etc\jetty.jks
Skriv in lösenord för nyckelförrådet (som angavs i punkt 4 under Skapa nytt nyckelförråd)
Välj Tools -> “Import Key Pair…“
Välj det konverterade certifikatet (som angavs i punkt 8 i Konvertera certifikatet) och ange lösenordet (punkt 7 i Konvertera certifikatet).
Välj OK när dialogrutan öppnas.
Välj en lämplig alias för lättare igenkänning.
Välj nytt lösenord och bekräfta det för certifikatet som importerats och välj OK. Lösenordet behövs vid eventuell export från nyckelförrådet till annat format. Behövs inte i denna process.
Välj File -> “Save Keystore” för att spara nyckelförrådet.
Det nya certifikatet har lagts till och nyckelförrådet uppdaterats. Weave måste startas om för att förändringen ska börja gälla.
Aktivera SSL i Weave
C:\development\weave\installation\2.6.9\jetty\lib>..\..\jre\bin\java.exe -cp jetty-util-9.4.38.v20210224.jar org.eclipse.jetty.util.security.Password secretPassword
start.ini
# --------------------------------------- # Module: ssl # Settings located in jetty_bace/start.d/https.ini # --------------------------------------- --module=ssl # --------------------------------------- # Module: https # Settings located in jetty_bace/start.d/https.ini # --------------------------------------- --module=https
https.ini
### TLS(SSL) Connector Configuration ## Connector host/address to bind to # jetty.ssl.host=0.0.0.0 ## Connector port to listen on jetty.ssl.port=8443 ## Connector idle timeout in milliseconds # jetty.ssl.idleTimeout=30000 ## Number of acceptors (-1 picks default based on number of cores) # jetty.ssl.acceptors=-1 ## Number of selectors (-1 picks default based on number of cores) # jetty.ssl.selectors=-1 ## ServerSocketChannel backlog (0 picks platform default) # jetty.ssl.acceptQueueSize=0 ## Thread priority delta to give to acceptor threads # jetty.ssl.acceptorPriorityDelta=0 ## The requested maximum length of the queue of incoming connections. # jetty.ssl.acceptQueueSize=0 ## Enable/disable the SO_REUSEADDR socket option. # jetty.ssl.reuseAddress=true ## Enable/disable TCP_NODELAY on accepted sockets. # jetty.ssl.acceptedTcpNoDelay=true ## The SO_RCVBUF option to set on accepted sockets. A value of -1 indicates that it is left to its default value. # jetty.ssl.acceptedReceiveBufferSize=-1 ## The SO_SNDBUF option to set on accepted sockets. A value of -1 indicates that it is left to its default value. # jetty.ssl.acceptedSendBufferSize=-1 ## Connect Timeout in milliseconds # jetty.ssl.connectTimeout=15000 ## Whether SNI is required for all secure connections. Rejections are in TLS handshakes. # jetty.sslContext.sniRequired=false ## Whether SNI is required for all secure connections. Rejections are in HTTP 400 response. # jetty.ssl.sniRequired=false ## Whether request host names are checked to match any SNI names # jetty.ssl.sniHostCheck=true ## max age in seconds for a Strict-Transport-Security response header (default -1) # jetty.ssl.stsMaxAgeSeconds=31536000 ## include subdomain property in any Strict-Transport-Security header (default false) # jetty.ssl.stsIncludeSubdomains=true ### SslContextFactory Configuration ## Note that OBF passwords are not secure, just protected from casual observation ## See http://www.eclipse.org/jetty/documentation/current/configuring-security-secure-passwords.html ## The Endpoint Identification Algorithm ## Same as javax.net.ssl.SSLParameters#setEndpointIdentificationAlgorithm(String) #jetty.sslContext.endpointIdentificationAlgorithm= ## SSL JSSE Provider # jetty.sslContext.provider= ## Keystore file path (relative to $jetty.base) jetty.sslContext.keyStorePath=etc/jetty.jks ## Truststore file path (relative to $jetty.base) jetty.sslContext.trustStorePath=etc/jetty.jks ## Keystore password jetty.sslContext.keyStorePassword=OBF:abcde ## Keystore type and provider # jetty.sslContext.keyStoreType=JKS # jetty.sslContext.keyStoreProvider= ## KeyManager password jetty.sslContext.keyManagerPassword=OBF:abcde ## Truststore password jetty.sslContext.trustStorePassword=OBF:abcde ## Truststore type and provider # jetty.sslContext.trustStoreType=JKS # jetty.sslContext.trustStoreProvider= ## whether client certificate authentication is required # jetty.sslContext.needClientAuth=false ## Whether client certificate authentication is desired # jetty.sslContext.wantClientAuth=false ## Whether cipher order is significant (since java 8 only) # jetty.sslContext.useCipherSuitesOrder=true ## To configure Includes / Excludes for Cipher Suites or Protocols see tweak-ssl.xml example at ## https://www.eclipse.org/jetty/documentation/current/configuring-ssl.html#configuring-sslcontextfactory-cipherSuites ## Set the size of the SslSession cache # jetty.sslContext.sslSessionCacheSize=-1 ## Set the timeout (in seconds) of the SslSession cache timeout # jetty.sslContext.sslSessionTimeout=-1 ## Allow SSL renegotiation # jetty.sslContext.renegotiationAllowed=true # jetty.sslContext.renegotiationLimit=5
jetty.xml
<Item> <New id="SecuredRedirectHandler" class="org.eclipse.jetty.server.handler.SecuredRedirectHandler"/> </Item>