diff --git a/src/detail/crypto-helpers.cpp b/src/detail/crypto-helpers.cpp
index 16e56a5..0834ad8 100644
--- a/src/detail/crypto-helpers.cpp
+++ b/src/detail/crypto-helpers.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2017-2022, Regents of the University of California.
+ * Copyright (c) 2017-2023, Regents of the University of California.
  *
  * This file is part of ndncert, a certificate management system based on NDN.
  *
@@ -362,33 +362,10 @@
 //  }
 }
 
-#ifndef NDNCERT_HAVE_TESTS
-static
-#endif
-uint32_t
+static uint32_t
 loadBigU32(const uint8_t* src) noexcept
 {
-#if BOOST_VERSION >= 107100
   return boost::endian::endian_load<uint32_t, 4, boost::endian::order::big>(src);
-#else
-  uint32_t dest;
-  std::memcpy(reinterpret_cast<uint8_t*>(&dest), src, sizeof(dest));
-  return boost::endian::big_to_native(dest);
-#endif
-}
-
-#ifndef NDNCERT_HAVE_TESTS
-static
-#endif
-void
-storeBigU32(uint8_t* dest, uint32_t src) noexcept
-{
-#if BOOST_VERSION >= 107100
-  boost::endian::endian_store<uint32_t, 4, boost::endian::order::big>(dest, src);
-#else
-  boost::endian::native_to_big_inplace(src);
-  std::memcpy(dest, reinterpret_cast<const uint8_t*>(&src), sizeof(src));
-#endif
 }
 
 static void
@@ -404,7 +381,7 @@
   else {
     counter += increment;
   }
-  storeBigU32(&iv[8], counter);
+  boost::endian::endian_store<uint32_t, 4, boost::endian::order::big>(&iv[8], counter);
 }
 
 Block
diff --git a/src/detail/crypto-helpers.hpp b/src/detail/crypto-helpers.hpp
index 235c6b5..1cf8df4 100644
--- a/src/detail/crypto-helpers.hpp
+++ b/src/detail/crypto-helpers.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2017-2021, Regents of the University of California.
+ * Copyright (c) 2017-2023, Regents of the University of California.
  *
  * This file is part of ndncert, a certificate management system based on NDN.
  *
@@ -139,7 +139,7 @@
  *
  * The TLV spec: https://github.com/named-data/ndncert/wiki/NDNCERT-Protocol-0.3#242-aes-gcm-encryption.
  *
- * @param tlv_type The TLV TYPE of the encoded block, either ApplicationParameters or Content.
+ * @param tlvType The TLV TYPE of the encoded block, either ApplicationParameters or Content.
  * @param key The AES key used for encryption.
  * @param payload The plaintext payload.
  * @param payloadSize The size of the plaintext payload.
@@ -173,14 +173,6 @@
                          const uint8_t* associatedData, size_t associatedDataSize,
                          std::vector<uint8_t>& decryptionIv, const std::vector<uint8_t>& encryptionIv);
 
-#ifdef NDNCERT_HAVE_TESTS
-uint32_t
-loadBigU32(const uint8_t* src) noexcept;
-
-void
-storeBigU32(uint8_t* dest, uint32_t src) noexcept;
-#endif
-
 } // namespace ndncert
 
 #endif // NDNCERT_DETAIL_CRYPTO_HELPERS_HPP
diff --git a/tests/io-fixture.hpp b/tests/io-fixture.hpp
index 209026f..d7b18e1 100644
--- a/tests/io-fixture.hpp
+++ b/tests/io-fixture.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -24,7 +24,7 @@
 
 #include "tests/clock-fixture.hpp"
 
-#include <boost/asio/io_service.hpp>
+#include <boost/asio/io_context.hpp>
 
 namespace ndncert::tests {
 
@@ -35,17 +35,13 @@
   afterTick() final
   {
     if (m_io.stopped()) {
-#if BOOST_VERSION >= 106600
       m_io.restart();
-#else
-      m_io.reset();
-#endif
     }
     m_io.poll();
   }
 
 protected:
-  boost::asio::io_service m_io;
+  boost::asio::io_context m_io;
 };
 
 } // namespace ndncert::tests
diff --git a/tests/unit-tests/crypto-helpers.t.cpp b/tests/unit-tests/crypto-helpers.t.cpp
index ff645dd..f8ec1a4 100644
--- a/tests/unit-tests/crypto-helpers.t.cpp
+++ b/tests/unit-tests/crypto-helpers.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2017-2022, Regents of the University of California.
+ * Copyright (c) 2017-2023, Regents of the University of California.
  *
  * This file is part of ndncert, a certificate management system based on NDN.
  *
@@ -22,6 +22,8 @@
 
 #include "tests/boost-test.hpp"
 
+#include <boost/endian/conversion.hpp>
+
 namespace ndncert::tests {
 
 BOOST_AUTO_TEST_SUITE(TestCryptoHelpers)
@@ -271,6 +273,8 @@
 
 BOOST_AUTO_TEST_CASE(AesIV)
 {
+  namespace be = boost::endian;
+
   const uint8_t key[] = {0xbc, 0x22, 0xf3, 0xf0, 0x5c, 0xc4, 0x0d, 0xb9,
                          0x31, 0x1e, 0x41, 0x92, 0x96, 0x6f, 0xee, 0x92};
   const std::string plaintext = "alongstringalongstringalongstringalongstringalongstringalongstringalongstringalongstring";
@@ -282,8 +286,8 @@
   auto ivBlock = block.get(tlv::InitializationVector);
   ndn::Buffer ivBuf(ivBlock.value(), ivBlock.value_size());
   BOOST_CHECK_EQUAL(ivBuf.size(), 12);
-  BOOST_CHECK_EQUAL(loadBigU32(&encryptionIv[8]), 6);
-  BOOST_CHECK_EQUAL(loadBigU32(&ivBuf[8]), 0);
+  BOOST_CHECK_EQUAL((be::endian_load<uint32_t, 4, be::order::big>(&encryptionIv[8])), 6);
+  BOOST_CHECK_EQUAL((be::endian_load<uint32_t, 4, be::order::big>(&ivBuf[8])), 0);
 
   block = encodeBlockWithAesGcm128(ndn::tlv::ApplicationParameters, key, (uint8_t*)plaintext.c_str(), plaintext.size(),
                                    (uint8_t*)associatedData.c_str(), associatedData.size(), encryptionIv);
diff --git a/tools/ndncert-ca-server.cpp b/tools/ndncert-ca-server.cpp
index 144f416..566f355 100644
--- a/tools/ndncert-ca-server.cpp
+++ b/tools/ndncert-ca-server.cpp
@@ -20,8 +20,8 @@
 
 #include "ca-module.hpp"
 
-#include <boost/asio.hpp>
 #include <boost/asio/ip/tcp.hpp>
+#include <boost/asio/signal_set.hpp>
 #include <boost/program_options/options_description.hpp>
 #include <boost/program_options/parsers.hpp>
 #include <boost/program_options/variables_map.hpp>
@@ -45,11 +45,7 @@
 writeDataToRepo(const Data& data)
 {
   boost::asio::ip::tcp::iostream requestStream;
-#if BOOST_VERSION >= 106600
   requestStream.expires_after(std::chrono::seconds(5));
-#else
-  requestStream.expires_from_now(boost::posix_time::seconds(5));
-#endif // BOOST_VERSION >= 106600
   requestStream.connect(repoHost, repoPort);
   if (!requestStream) {
     std::cerr << "ERROR: Cannot publish the certificate to repo-ng"
diff --git a/wscript b/wscript
index 8fd6573..ad13479 100644
--- a/wscript
+++ b/wscript
@@ -40,8 +40,8 @@
     conf.check_openssl(lib='crypto', atleast_version='1.1.1')
 
     conf.check_boost(lib='filesystem', mt=True)
-    if conf.env.BOOST_VERSION_NUMBER < 106501:
-        conf.fatal('The minimum supported version of Boost is 1.65.1.\n'
+    if conf.env.BOOST_VERSION_NUMBER < 107100:
+        conf.fatal('The minimum supported version of Boost is 1.71.0.\n'
                    'Please upgrade your distribution or manually install a newer version of Boost.\n'
                    'For more information, see https://redmine.named-data.net/projects/nfd/wiki/Boost')
 
