Fix some typos (found by codespell)
diff --git a/certbot-apache/certbot_apache/_internal/http_01.py b/certbot-apache/certbot_apache/_internal/http_01.py
index 872704db87c..12088724372 100644
--- a/certbot-apache/certbot_apache/_internal/http_01.py
+++ b/certbot-apache/certbot_apache/_internal/http_01.py
@@ -107,7 +107,7 @@ def _mod_config(self):
             if any(a.is_wildcard() or a.get_port() == http_port for a in vhost.addrs):
                 found = True
 
-        # If there's at least one elgible VirtualHost, also add all unnamed VirtualHosts
+        # If there's at least one eligible VirtualHost, also add all unnamed VirtualHosts
         # because they might match at runtime (#8890)
         if found:
             selected_vhosts += self._unnamed_vhosts()
diff --git a/certbot-apache/certbot_apache/_internal/interfaces.py b/certbot-apache/certbot_apache/_internal/interfaces.py
index 106e2778a57..8381fd2a63d 100644
--- a/certbot-apache/certbot_apache/_internal/interfaces.py
+++ b/certbot-apache/certbot_apache/_internal/interfaces.py
@@ -312,7 +312,7 @@ def set_parameters(self, parameters):
         """
         Sets the sequence of parameters for this ParserNode object without
         whitespaces. While the whitespaces for parameters are discarded when using
-        this method, the whitespacing preceeding the ParserNode itself should be
+        this method, the whitespacing preceding the ParserNode itself should be
         kept intact.
 
         :param list parameters: sequence of parameters
@@ -364,7 +364,7 @@ class BlockNode(DirectiveNode, metaclass=abc.ABCMeta):
     def add_child_block(self, name, parameters=None, position=None):
         """
         Adds a new BlockNode child node with provided values and marks the callee
-        BlockNode dirty. This is used to add new children to the AST. The preceeding
+        BlockNode dirty. This is used to add new children to the AST. The preceding
         whitespaces should not be added based on the ancestor or siblings for the
         newly created object. This is to match the current behavior of the legacy
         parser implementation.
@@ -385,7 +385,7 @@ def add_child_directive(self, name, parameters=None, position=None):
         """
         Adds a new DirectiveNode child node with provided values and marks the
         callee BlockNode dirty. This is used to add new children to the AST. The
-        preceeding whitespaces should not be added based on the ancestor or siblings
+        preceding whitespaces should not be added based on the ancestor or siblings
         for the newly created object. This is to match the current behavior of the
         legacy parser implementation.
 
@@ -406,7 +406,7 @@ def add_child_comment(self, comment="", position=None):
         """
         Adds a new CommentNode child node with provided value and marks the
         callee BlockNode dirty. This is used to add new children to the AST. The
-        preceeding whitespaces should not be added based on the ancestor or siblings
+        preceding whitespaces should not be added based on the ancestor or siblings
         for the newly created object. This is to match the current behavior of the
         legacy parser implementation.
 
diff --git a/certbot-apache/certbot_apache/_internal/override_centos.py b/certbot-apache/certbot_apache/_internal/override_centos.py
index 431e8ec46ed..c898615bb22 100644
--- a/certbot-apache/certbot_apache/_internal/override_centos.py
+++ b/certbot-apache/certbot_apache/_internal/override_centos.py
@@ -51,7 +51,7 @@ def config_test(self):
 
     def _try_restart_fedora(self):
         """
-        Tries to restart httpd using systemctl to generate the self signed keypair.
+        Tries to restart httpd using systemctl to generate the self signed key pair.
         """
 
         try:
diff --git a/certbot-apache/certbot_apache/_internal/override_fedora.py b/certbot-apache/certbot_apache/_internal/override_fedora.py
index cf0764d682c..9f2fed9b637 100644
--- a/certbot-apache/certbot_apache/_internal/override_fedora.py
+++ b/certbot-apache/certbot_apache/_internal/override_fedora.py
@@ -43,7 +43,7 @@ def get_parser(self):
 
     def _try_restart_fedora(self):
         """
-        Tries to restart httpd using systemctl to generate the self signed keypair.
+        Tries to restart httpd using systemctl to generate the self signed key pair.
         """
         try:
             util.run_script(['systemctl', 'restart', 'httpd'])
diff --git a/certbot-apache/tests/entrypoint_test.py b/certbot-apache/tests/entrypoint_test.py
index 6f6f5bbb093..2a269441535 100644
--- a/certbot-apache/tests/entrypoint_test.py
+++ b/certbot-apache/tests/entrypoint_test.py
@@ -41,7 +41,7 @@ def test_nonexistent_generic(self):
         with mock.patch("certbot.util.get_os_info") as mock_info:
             mock_info.return_value = ("nonexistent", "irrelevant")
             with mock.patch("certbot.util.get_systemd_os_like") as mock_like:
-                mock_like.return_value = ["unknonwn"]
+                mock_like.return_value = ["unknown"]
                 self.assertEqual(entrypoint.get_configurator(),
                                  configurator.ApacheConfigurator)
 
diff --git a/certbot-compatibility-test/Dockerfile b/certbot-compatibility-test/Dockerfile
index e0a439d01a6..646f2c99ebe 100644
--- a/certbot-compatibility-test/Dockerfile
+++ b/certbot-compatibility-test/Dockerfile
@@ -15,7 +15,7 @@ RUN tools/venv.py
 ENV PATH /opt/certbot/src/venv/bin:$PATH
 
 # install in editable mode (-e) to save space: it's not possible to
-# "rm -rf /opt/certbot/src" (it's stays in the underlaying image);
+# "rm -rf /opt/certbot/src" (it's stays in the underlying image);
 # this might also help in debugging: you can "docker run --entrypoint
 # bash" and investigate, apply patches, etc.
 
diff --git a/certbot-compatibility-test/certbot_compatibility_test/test_driver.py b/certbot-compatibility-test/certbot_compatibility_test/test_driver.py
index 240f528d488..62098488f9d 100644
--- a/certbot-compatibility-test/certbot_compatibility_test/test_driver.py
+++ b/certbot-compatibility-test/certbot_compatibility_test/test_driver.py
@@ -330,7 +330,7 @@ def setup_logging(args):
 
 
 def setup_display():
-    """"Prepares a display utility instace for the Certbot plugins """
+    """"Prepares a display utility instance for the Certbot plugins """
     displayer = display_util.NoninteractiveDisplay(sys.stdout)
     display_obj.set_display(displayer)
 
diff --git a/certbot-nginx/certbot_nginx/_internal/parser_obj.py b/certbot-nginx/certbot_nginx/_internal/parser_obj.py
index d4d332c47dc..33ed822c301 100644
--- a/certbot-nginx/certbot_nginx/_internal/parser_obj.py
+++ b/certbot-nginx/certbot_nginx/_internal/parser_obj.py
@@ -260,7 +260,7 @@ def __contains__(self, word):
 
 
 class Block(Parsable):
-    """ Any sort of bloc, denoted by a block name and curly braces, like so:
+    """ Any sort of block, denoted by a block name and curly braces, like so:
     The parsed block:
         block name {
             content 1;
@@ -313,8 +313,8 @@ def parse(self, raw_list, add_spaces=False):
         """
         if not Block.should_parse(raw_list):
             raise errors.MisconfigurationError("Block parsing expects a list of length 2. "
-                "First element should be a list of string types (the bloc names), "
-                "and second should be another list of statements (the bloc content).")
+                "First element should be a list of string types (the block names), "
+                "and second should be another list of statements (the block content).")
         self.names = Sentence(self)
         if add_spaces:
             raw_list[0].append(" ")
diff --git a/certbot/certbot/_internal/display/obj.py b/certbot/certbot/_internal/display/obj.py
index c36d6a6aed0..67043463b50 100644
--- a/certbot/certbot/_internal/display/obj.py
+++ b/certbot/certbot/_internal/display/obj.py
@@ -396,7 +396,7 @@ def _get_valid_int_ans(self, max_):
 # through the public API in certbot.display.util.
 @zope.interface.implementer(interfaces.IDisplay)
 class NoninteractiveDisplay:
-    """An diplay utility implementation that never asks for interactive user input"""
+    """A display utility implementation that never asks for interactive user input"""
 
     def __init__(self, outfile, *unused_args, **unused_kwargs):
         super().__init__()
diff --git a/certbot/certbot/_internal/renewal.py b/certbot/certbot/_internal/renewal.py
index d5a808e634a..183e83ec066 100644
--- a/certbot/certbot/_internal/renewal.py
+++ b/certbot/certbot/_internal/renewal.py
@@ -360,7 +360,7 @@ def _renew_describe_results(config: configuration.NamespaceConfig, renew_success
     :param list renew_successes: list of fullchain paths which were renewed
     :param list renew_failures: list of fullchain paths which failed to be renewed
     :param list renew_skipped: list of messages to print about skipped certificates
-    :param list parse_failures: list of renewal parameter paths which had erorrs
+    :param list parse_failures: list of renewal parameter paths which had errors
     """
     notify = display_util.notify
     notify_error = logger.error
diff --git a/certbot/certbot/interfaces.py b/certbot/certbot/interfaces.py
index 908b5a16acc..fa4d1d6ae25 100644
--- a/certbot/certbot/interfaces.py
+++ b/certbot/certbot/interfaces.py
@@ -474,7 +474,7 @@ def renew_deploy(self, lineage, *args, **kwargs):
         """Perform updates defined by installer when a certificate has been renewed
 
         If an installer is a subclass of the class containing this method, this
-        function will always be called when a certficate has been renewed by
+        function will always be called when a certificate has been renewed by
         running "certbot renew". For example if a plugin needs to copy a
         certificate over, or change configuration based on the new certificate.
 
diff --git a/certbot/docs/install.rst b/certbot/docs/install.rst
index 4533cfcc1ab..e36553a155b 100644
--- a/certbot/docs/install.rst
+++ b/certbot/docs/install.rst
@@ -90,7 +90,7 @@ recommended for your system at certbot.eff.org_, which enables you to use
 installer plugins that cover both of those hard topics.
 
 If you're still not convinced and have decided to use this method, from
-the server that the domain you're requesting a certficate for resolves
+the server that the domain you're requesting a certificate for resolves
 to, `install Docker`_, then issue a command like the one found below. If
 you are using Certbot with the :ref:`Standalone` plugin, you will need
 to make the port it uses accessible from outside of the container by
diff --git a/certbot/docs/using.rst b/certbot/docs/using.rst
index 04c3be2693a..561782e764a 100644
--- a/certbot/docs/using.rst
+++ b/certbot/docs/using.rst
@@ -818,7 +818,7 @@ scheduled task to automatically renew your certificates in the background. If yo
 whether your system has a pre-installed scheduled task for Certbot, it is safe to follow these
 instructions to create one.
 
-If you're using Windows, these instructions are not neccessary as Certbot on Windows comes with
+If you're using Windows, these instructions are not necessary as Certbot on Windows comes with
 a scheduled task for automated renewal pre-installed.
 
 Run the following line, which will add a cron job to `/etc/crontab`:
diff --git a/certbot/tests/error_handler_test.py b/certbot/tests/error_handler_test.py
index 0146f0edd65..010a756c12b 100644
--- a/certbot/tests/error_handler_test.py
+++ b/certbot/tests/error_handler_test.py
@@ -80,7 +80,7 @@ def test_context_manager_with_signal(self):
                 send_signal(self.signals[0])
                 should_be_42 *= 10
 
-        # check execution stoped when the signal was sent
+        # check execution stopped when the signal was sent
         self.assertEqual(42, should_be_42)
         # assert signals were caught
         self.assertEqual([self.signals[0]], signals_received)

Signed-off-by: Stefan Weil <sw@weilnetz.de>