diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # ChangeLog
 
+## 0.2.22
+
+* Using tls v2.2 and crypton-x509* v1.8.
+
 ## 0.2.21
 
 * Terminating threads properly with event-poll model.
diff --git a/Network/QUIC/Config.hs b/Network/QUIC/Config.hs
--- a/Network/QUIC/Config.hs
+++ b/Network/QUIC/Config.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE TupleSections #-}
 
@@ -124,7 +125,11 @@
         , ccCiphers = supportedCiphers defaultSupported
         , ccGroups = supportedGroups defaultSupported
         , ccParameters = defaultParameters
+#if MIN_VERSION_tls(2,1,10)
         , ccKeyLog = defaultKeyLogger
+#else
+        , ccKeyLog = \ ~_ -> return ()
+#endif
         , ccQLog = Nothing
         , ccCredentials = mempty
         , ccHooks = defaultHooks
@@ -187,7 +192,11 @@
         , scCiphers = supportedCiphers defaultSupported
         , scGroups = supportedGroups defaultSupported
         , scParameters = defaultParameters
+#if MIN_VERSION_tls(2,1,10)
         , scKeyLog = defaultKeyLogger
+#else
+        , scKeyLog = \ ~_ -> return ()
+#endif
         , scQLog = Nothing
         , scCredentials = mempty
         , scHooks = defaultHooks
diff --git a/Network/QUIC/Server/Reader.hs b/Network/QUIC/Server/Reader.hs
--- a/Network/QUIC/Server/Reader.hs
+++ b/Network/QUIC/Server/Reader.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE RecordWildCards #-}
 
@@ -33,7 +34,11 @@
 import qualified Network.Socket.ByteString as NSB
 import qualified System.IO.Error as E
 import System.Log.FastLogger
+#if MIN_VERSION_random(1,3,0)
 import System.Random (getStdRandom, randomRIO, uniformByteString)
+#else
+import System.Random (getStdRandom, randomRIO, genByteString)
+#endif
 
 import Network.QUIC.Common
 import Network.QUIC.Config
@@ -390,7 +395,11 @@
                     -- fixme: hard coding
                     when (srRate < statelessResetLimit) $ do
                         flag <- randomRIO (0, 127)
+#if MIN_VERSION_random(1,3,0)
                         body <- getStdRandom $ uniformByteString 1263
+#else
+                        body <- getStdRandom $ genByteString 1263
+#endif
                         let srt = genStatelessReset dCID
                             statelessReset = BS.concat [BS.singleton flag, body, fromStatelessResetToken srt]
                         send' statelessReset
diff --git a/Network/QUIC/Types/CID.hs b/Network/QUIC/Types/CID.hs
--- a/Network/QUIC/Types/CID.hs
+++ b/Network/QUIC/Types/CID.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
@@ -29,7 +30,11 @@
 import qualified Data.ByteString.Short as Short
 import GHC.Generics
 import Network.Socket (SockAddr)
+#if MIN_VERSION_random(1,3,0)
 import System.Random (getStdRandom, uniformByteString)
+#else
+import System.Random (getStdRandom, genByteString)
+#endif
 
 import Network.QUIC.Imports
 
@@ -77,8 +82,13 @@
 
 makeGenStatelessReset :: IO (CID -> StatelessResetToken)
 makeGenStatelessReset = do
+#if MIN_VERSION_random(1,3,0)
     salt <- getStdRandom $ uniformByteString 20
     ikm <- getStdRandom $ uniformByteString 20
+#else
+    salt <- getStdRandom $ genByteString 20
+    ikm <- getStdRandom $ genByteString 20
+#endif
     let prk = extract salt ikm :: PRK SHA256
         makeStatelessReset dcid = StatelessResetToken $ Short.toShort $ expand prk (fromCID dcid) 16
     return makeStatelessReset
diff --git a/quic.cabal b/quic.cabal
--- a/quic.cabal
+++ b/quic.cabal
@@ -1,6 +1,6 @@
 cabal-version:      >=1.10
 name:               quic
-version:            0.2.21
+version:            0.2.22
 license:            BSD3
 license-file:       LICENSE
 maintainer:         kazu@iij.ad.jp
@@ -136,10 +136,10 @@
         containers,
         crypto-token >=0.1.2 && <0.2,
         crypton >=0.34,
-        crypton-x509 >=1.7.6 && <1.8,
-        crypton-x509-store >=1.6.11 && <1.7,
-        crypton-x509-system >=1.6.7 && <1.7,
-        crypton-x509-validation >=1.6 && <1.7,
+        crypton-x509 >=1.8.0 && <1.9,
+        crypton-x509-store >=1.8.0 && <1.9,
+        crypton-x509-system >=1.8.0 && <1.9,
+        crypton-x509-validation >=1.8.0 && <1.9,
         fast-logger >=3.2.2 && <3.3,
         filepath,
         iproute >=1.7.12 && <1.8,
@@ -147,10 +147,10 @@
         network >=3.2.3,
         network-byte-order >=0.1.7 && <0.2,
         network-control >=0.1.5 && <0.2,
-        random >=1.3 && <1.4,
+        random >=1.2 && <1.4,
         serialise,
         stm >=2.5 && <2.6,
-        tls >=2.1.10 && <2.2,
+        tls >=2.1.8 && <2.3,
         unix-time >=0.4.12 && <0.5
 
     if os(linux)
diff --git a/util/quic-server.hs b/util/quic-server.hs
--- a/util/quic-server.hs
+++ b/util/quic-server.hs
@@ -92,7 +92,7 @@
     ]
 
 usage :: String
-usage = "Usage: server [OPTION] addr [addrs] port"
+usage = "Usage: quic-server [OPTION] addr [addrs] port"
 
 showUsageAndExit :: String -> IO a
 showUsageAndExit msg = do
