diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,10 @@
 
 [PVP]: https://pvp.haskell.org/
 
+## 1.0.7 (2025-02-11)
+
+The program should now build with any version of the `tls` library. (In our previous release, 1.0.6, we started requiring a pre-2.0 version of `tls` to avoid [issue #1](https://github.com/bdesham/pinboard-notes-backup/issues/1). This was an unnecessarily brittle solution: newer versions of `tls` work fine as long as we configure them properly.)
+
 ## 1.0.6 (2025-02-01)
 
 - If the database contains two notes with the same ID, the program will now abort rather than try to update any of them. (A database constraint should have prevented this situation from ever occurring; this is more of a “belt and braces” change than anything.)
diff --git a/pinboard-notes-backup.cabal b/pinboard-notes-backup.cabal
--- a/pinboard-notes-backup.cabal
+++ b/pinboard-notes-backup.cabal
@@ -1,5 +1,5 @@
 name:                pinboard-notes-backup
-version:             1.0.6
+version:             1.0.7
 synopsis:            Back up the notes you've saved to Pinboard
 description:         A command-line application to back up your notes from the
                      Pinboard bookmarking service to a local SQLite database.
@@ -25,14 +25,22 @@
 executable pnbackup
   hs-source-dirs:      src
   main-is:             Main.hs
-  other-modules:       Paths_pinboard_notes_backup Pinboard Types Utils Utils.FriendlyReqError
+  other-modules:       Paths_pinboard_notes_backup
+                       Pinboard
+                       Types
+                       Utils
+                       Utils.FriendlyReqError
+                       Utils.HttpConfig
   default-language:    Haskell2010
   build-depends:       base                   >= 4.7  && < 5
                        , aeson                >= 0.8  && < 2.3
                        , ansi-wl-pprint       >= 0.6  && < 1.1
                        , bytestring           >= 0.10 && < 0.13
                        , containers           >= 0.5  && < 0.8
+                       , crypton-connection
+                       , data-default-class
                        , http-client          >= 0.5  && < 0.8
+                       , http-client-tls
                        , http-types           >= 0.12 && < 0.13
                        , mtl                  >= 2.2  && < 2.4
                        , optparse-applicative >= 0.11 && < 0.19
@@ -40,7 +48,7 @@
                        , sqlite-simple        >= 0.4  && < 0.5
                        , text                 >= 1.2  && < 2.2
                        , time                 >= 1.5  && < 1.15
-                       , tls                             < 2.0
+                       , tls
   default-extensions:  DataKinds
                        DeriveFunctor
                        GeneralizedNewtypeDeriving
diff --git a/src/Pinboard.hs b/src/Pinboard.hs
--- a/src/Pinboard.hs
+++ b/src/Pinboard.hs
@@ -27,7 +27,7 @@
 import Network.HTTP.Req
 import Paths_pinboard_notes_backup (version)
 import Types
-import Utils (count, friendlyReqError)
+import Utils (count, friendlyReqError, makeHttpConfig)
 
 
 -- * Constants
@@ -78,6 +78,9 @@
 instance MonadHttp PinboardM where
     handleHttpException :: HttpException -> PinboardM a
     handleHttpException = throwError . friendlyReqError
+
+    getHttpConfig :: PinboardM HttpConfig
+    getHttpConfig = liftIO makeHttpConfig
 
 runPinboard :: String -> Verbosity -> PinboardM a -> IO (Either Text a)
 runPinboard token verbosity k =
diff --git a/src/Utils.hs b/src/Utils.hs
--- a/src/Utils.hs
+++ b/src/Utils.hs
@@ -1,5 +1,6 @@
 module Utils ( count
              , friendlyReqError
+             , makeHttpConfig
              , pluralize
              , putStrLnErr
              ) where
@@ -9,6 +10,7 @@
 import Data.Text.IO (hPutStrLn)
 import System.IO (hFlush, stderr, stdout)
 import Utils.FriendlyReqError (friendlyReqError)
+import Utils.HttpConfig (makeHttpConfig)
 
 -- | Counts the number of occurrences of the given value within the given list.
 count :: (Eq a, Foldable t) => a -> t a -> Int
diff --git a/src/Utils/HttpConfig.hs b/src/Utils/HttpConfig.hs
new file mode 100644
--- /dev/null
+++ b/src/Utils/HttpConfig.hs
@@ -0,0 +1,36 @@
+{-# LANGUAGE CPP #-}
+
+module Utils.HttpConfig (makeHttpConfig) where
+
+import qualified Network.HTTP.Req as Req
+
+#if MIN_VERSION_tls(2,0,0)
+import Data.Default.Class
+import Network.Connection (TLSSettings (..))
+import Network.HTTP.Client (newManager)
+import Network.HTTP.Client.TLS (mkManagerSettings)
+import Network.TLS (EMSMode (..), Supported (..))
+#endif
+
+-- | Creates an 'Network.HTTP.Req.HttpConfig' suitable for connecting to the Pinboard API server.
+--
+-- As of February 2025, the latest TLS version supported by the Pinboard server is 1.2, and the
+-- server does not support the Extended Main Secret (also called Extended Master Secret or EMS)
+-- extension. As of version 2.0.0 of the tls library, we need to use a custom configuration to
+-- connect to such a server.
+makeHttpConfig :: IO Req.HttpConfig
+
+#if MIN_VERSION_tls(2,0,0)
+
+makeHttpConfig = do
+    let supported = def {supportedExtendedMainSecret=AllowEMS}
+        tlsSettings = TLSSettingsSimple False False False supported
+        managerSettings = mkManagerSettings tlsSettings Nothing
+    manager <- newManager managerSettings
+    pure $ Req.defaultHttpConfig {Req.httpConfigAltManager=Just manager}
+
+#else
+
+makeHttpConfig = pure Req.defaultHttpConfig
+
+#endif
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -1,6 +1,1 @@
 resolver: lts-23.5
-extra-deps:
-  # Version 2.0 of the tls package started requiring hosts to support Extended
-  # Main Secret, but the Pinboard server doesn't support this and so the
-  # program would fail at runtime if build with tls 2.0 or later. See issue #1.
-  - tls-1.9.0@sha256:8ad332dc0224decb1b137bf6c9678b4f786487b9aaa5c9068cd3ad19d42c39a7,5571
diff --git a/stack.yaml.lock b/stack.yaml.lock
--- a/stack.yaml.lock
+++ b/stack.yaml.lock
@@ -3,14 +3,7 @@
 # For more information, please see the documentation at:
 #   https://docs.haskellstack.org/en/stable/lock_files
 
-packages:
-- completed:
-    hackage: tls-1.9.0@sha256:8ad332dc0224decb1b137bf6c9678b4f786487b9aaa5c9068cd3ad19d42c39a7,5571
-    pantry-tree:
-      sha256: 91d022739795013aad4d5fee48ff5248623ed4cc83a611c9aa7c52e21766221b
-      size: 4897
-  original:
-    hackage: tls-1.9.0@sha256:8ad332dc0224decb1b137bf6c9678b4f786487b9aaa5c9068cd3ad19d42c39a7,5571
+packages: []
 snapshots:
 - completed:
     sha256: 2d580e973dc1a5ff70cd2bb1248613f835829b38eed5db5dafc3615a22cb1bcd
