diff --git a/docs/api-stability.rst b/docs/api-stability.rst
index 7ba1d42..2bb5384 100644
--- a/docs/api-stability.rst
+++ b/docs/api-stability.rst
@@ -42,9 +42,9 @@
 
 * In ``cryptography X.Y`` the feature exists.
 * In ``cryptography X.Y+1`` using that feature will emit a
-  ``PendingDeprecationWarning``.
+  ``UserWarning``.
 * In ``cryptography X.Y+2`` using that feature will emit a
-  ``DeprecationWarning``.
+  ``UserWarning``.
 * In ``cryptography X.Y+3`` the feature will be removed or changed.
 
 In short, code that runs without warnings will always continue to work for a
diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py
index 382905c..baa7b7a 100644
--- a/src/cryptography/utils.py
+++ b/src/cryptography/utils.py
@@ -11,11 +11,17 @@
 import warnings
 
 
+# We use a UserWarning subclass, instead of DeprecationWarning, because CPython
+# decided deprecation warnings should be invisble be default.
+class CryptographyDeprecationWarning(UserWarning):
+    pass
+
+
 # Several APIs were deprecated with no specific end-of-life date because of the
 # ubiquity of their use. They should not be removed until we agree on when that
 # cycle ends.
-PersistentlyDeprecated = DeprecationWarning
-DeprecatedIn21 = DeprecationWarning
+PersistentlyDeprecated = CryptographyDeprecationWarning
+DeprecatedIn21 = CryptographyDeprecationWarning
 
 
 def _check_bytes(name, value):
diff --git a/tests/hazmat/primitives/test_asym_utils.py b/tests/hazmat/primitives/test_asym_utils.py
index 4835f09..fc9e9fd 100644
--- a/tests/hazmat/primitives/test_asym_utils.py
+++ b/tests/hazmat/primitives/test_asym_utils.py
@@ -10,12 +10,15 @@
     Prehashed, decode_dss_signature, decode_rfc6979_signature,
     encode_dss_signature, encode_rfc6979_signature,
 )
+from cryptography.utils import CryptographyDeprecationWarning
 
 
 def test_deprecated_rfc6979_signature():
-    sig = pytest.deprecated_call(encode_rfc6979_signature, 1, 1)
+    with pytest.warns(CryptographyDeprecationWarning):
+        sig = encode_rfc6979_signature(1, 1)
     assert sig == b"0\x06\x02\x01\x01\x02\x01\x01"
-    decoded = pytest.deprecated_call(decode_rfc6979_signature, sig)
+    with pytest.warns(CryptographyDeprecationWarning):
+        decoded = decode_rfc6979_signature(sig)
     assert decoded == (1, 1)
 
 
diff --git a/tests/hazmat/primitives/test_dsa.py b/tests/hazmat/primitives/test_dsa.py
index 89303fe..f08de6a 100644
--- a/tests/hazmat/primitives/test_dsa.py
+++ b/tests/hazmat/primitives/test_dsa.py
@@ -18,6 +18,7 @@
 from cryptography.hazmat.primitives.asymmetric.utils import (
     Prehashed, encode_dss_signature
 )
+from cryptography.utils import CryptographyDeprecationWarning
 
 from .fixtures_dsa import (
     DSA_KEY_1024, DSA_KEY_2048, DSA_KEY_3072
@@ -574,9 +575,8 @@
             y=vector['y']
         ).public_key(backend)
         sig = encode_dss_signature(vector['r'], vector['s'])
-        verifier = pytest.deprecated_call(
-            public_key.verifier, sig, algorithm()
-        )
+        with pytest.warns(CryptographyDeprecationWarning):
+            verifier = public_key.verifier(sig, algorithm())
 
         verifier.update(vector['msg'])
         if vector['result'] == "F":
@@ -687,7 +687,8 @@
             ),
             x=vector['x']
         ).private_key(backend)
-        signer = pytest.deprecated_call(private_key.signer, algorithm())
+        with pytest.warns(CryptographyDeprecationWarning):
+            signer = private_key.signer(algorithm())
         signer.update(vector['msg'])
         signature = signer.finalize()
         assert signature
diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py
index f493869..4f08f18 100644
--- a/tests/hazmat/primitives/test_ec.py
+++ b/tests/hazmat/primitives/test_ec.py
@@ -20,6 +20,7 @@
 from cryptography.hazmat.primitives.asymmetric.utils import (
     Prehashed, encode_dss_signature
 )
+from cryptography.utils import CryptographyDeprecationWarning
 
 from .fixtures_ec import EC_KEY_SECP384R1
 from ...doubles import DummyKeySerializationEncryption
@@ -350,13 +351,13 @@
         pkey = key.public_key()
         assert pkey
 
-        signer = pytest.deprecated_call(key.signer, ec.ECDSA(hash_type()))
+        with pytest.warns(CryptographyDeprecationWarning):
+            signer = key.signer(ec.ECDSA(hash_type()))
         signer.update(b"YELLOW SUBMARINE")
         signature = signer.finalize()
 
-        verifier = pytest.deprecated_call(
-            pkey.verifier, signature, ec.ECDSA(hash_type())
-        )
+        with pytest.warns(CryptographyDeprecationWarning):
+            verifier = pkey.verifier(signature, ec.ECDSA(hash_type()))
         verifier.update(b"YELLOW SUBMARINE")
         verifier.verify()
 
diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py
index fc956ec..0982042 100644
--- a/tests/hazmat/primitives/test_rsa.py
+++ b/tests/hazmat/primitives/test_rsa.py
@@ -24,6 +24,7 @@
 from cryptography.hazmat.primitives.asymmetric.rsa import (
     RSAPrivateNumbers, RSAPublicNumbers
 )
+from cryptography.utils import CryptographyDeprecationWarning
 
 from .fixtures_rsa import (
     RSA_KEY_1024, RSA_KEY_1025, RSA_KEY_1026, RSA_KEY_1027, RSA_KEY_1028,
@@ -383,11 +384,8 @@
                 n=private["modulus"]
             )
         ).private_key(backend)
-        signer = pytest.deprecated_call(
-            private_key.signer,
-            padding.PKCS1v15(),
-            hashes.SHA1()
-        )
+        with pytest.warns(CryptographyDeprecationWarning):
+            signer = private_key.signer(padding.PKCS1v15(), hashes.SHA1())
         signer.update(binascii.unhexlify(example["message"]))
         signature = signer.finalize()
         assert binascii.hexlify(signature) == example["signature"]
@@ -714,12 +712,12 @@
             e=public["public_exponent"],
             n=public["modulus"]
         ).public_key(backend)
-        verifier = pytest.deprecated_call(
-            public_key.verifier,
-            binascii.unhexlify(example["signature"]),
-            padding.PKCS1v15(),
-            hashes.SHA1()
-        )
+        with pytest.warns(CryptographyDeprecationWarning):
+            verifier = public_key.verifier(
+                binascii.unhexlify(example["signature"]),
+                padding.PKCS1v15(),
+                hashes.SHA1()
+            )
         verifier.update(binascii.unhexlify(example["message"]))
         verifier.verify()
 
diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py
index 97b5a74..27e284a 100644
--- a/tests/x509/test_x509.py
+++ b/tests/x509/test_x509.py
@@ -577,7 +577,7 @@
             backend
         )
 
-        with pytest.deprecated_call():
+        with pytest.warns(utils.CryptographyDeprecationWarning):
             assert cert.serial == 2
             assert cert.serial_number == 2
 
@@ -588,7 +588,7 @@
             backend
         )
 
-        with pytest.deprecated_call():
+        with pytest.warns(utils.CryptographyDeprecationWarning):
             cert.serial
 
     def test_load_der_cert(self, backend):
