diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 # Revision history for gemini-server
 
+## 0.3.0.0 -- 2021-03-19
+
+* Allow different paths for key and cert
+* Fix TLS session resumption by setting a session id context
+
 ## 0.2.0.0 -- 2021-02-22
 
 * SSL/TLS support, including client certificates.
@@ -7,4 +12,3 @@
 ## 0.1.0.0 -- 2020-07-24
 
 * First version. Released on an unsuspecting world.
-
diff --git a/Network/Gemini/Server.hs b/Network/Gemini/Server.hs
--- a/Network/Gemini/Server.hs
+++ b/Network/Gemini/Server.hs
@@ -63,12 +63,13 @@
 runServer :: Maybe HostName
           -> ServiceName
           -> FilePath -- ^ Path to the server certificate
+          -> FilePath -- ^ Path to the private key
           -> (Request -> IO Response) -- ^ Request handler
           -> IO ()
-runServer host service cert handler = withOpenSSL $ do
+runServer host service cert key handler = withOpenSSL $ do
   updateGlobalLogger "Network.Gemini.Server" $ setLevel INFO
   -- MAYBE server config
-  sslCtx <- setupSSL cert
+  sslCtx <- setupSSL cert key
   runTCPServer host service $ \sock -> do
     peer <- getPeerName sock
     catch -- the ssl session may fail
@@ -78,16 +79,17 @@
         (talk handler peer))
       (\e -> logM "Network.Gemini.Server" ERROR $ show (e :: SomeException))
 
-setupSSL :: FilePath -> IO SSL.SSLContext
-setupSSL cert = do
+setupSSL :: FilePath -> FilePath -> IO SSL.SSLContext
+setupSSL cert key = do
   sslCtx <- SSL.context
   SSL.contextSetDefaultCiphers sslCtx
   SSL.contextSetCertificateFile sslCtx cert
-  SSL.contextSetPrivateKeyFile sslCtx cert
+  SSL.contextSetPrivateKeyFile sslCtx key
   SSL.contextSetVerificationMode sslCtx $ SSL.VerifyPeer False True $
     -- Accept all certificates, since we don't really care about validity wrt CAs
     -- but only about the public key
     Just $ \_ _ -> pure True
+  SSL.contextSetSessionIdContext sslCtx $ fromString "gemini-server"
   pure sslCtx
 
 acceptSSL :: SSL.SSLContext -> Socket -> IO SSL
diff --git a/gemini-server.cabal b/gemini-server.cabal
--- a/gemini-server.cabal
+++ b/gemini-server.cabal
@@ -1,13 +1,11 @@
 cabal-version:       2.2
 
 name:                gemini-server
-version:             0.2.0.0
+version:             0.3.0.0
 synopsis:            A lightweight server for the Gemini protocol
 description:
   This package contains a server for the
   Gemini (<https://gemini.circumlunar.space/>) protocol.
-  There is no tls support yet, so you'll need a tls terminator like stunnel
-  in front of it.
   For a higher level interface, see the gemini-router package.
 homepage:            https://sr.ht/~fgaz/haskell-gemini/
 bug-reports:         https://todo.sr.ht/~fgaz/haskell-gemini
@@ -25,7 +23,7 @@
 
 library
   exposed-modules:     Network.Gemini.Server
-  build-depends:       base ^>=4.12.0.0 || ^>=4.13.0.0 || ^>=4.14.0.0
+  build-depends:       base ^>=4.12.0.0 || ^>=4.13.0.0 || ^>=4.14.0.0 || ^>=4.15.0.0
                      , network ^>=3.1.1.1
                      , network-run ^>=0.2.3
                      , network-uri ^>=2.6.3.0 || ^>=2.7.0.0
@@ -33,6 +31,6 @@
                      , utf8-string ^>=1.0.1.1
                      , bytestring ^>=0.10.10.0
                      , hslogger ^>=1.3.1.0
-                     , HsOpenSSL ^>=0.11.5.1
+                     , HsOpenSSL ^>=0.11.6
   ghc-options:         -Wall
   default-language:    Haskell2010
