diff --git a/OpenSSL/SSL.py b/OpenSSL/SSL.py
index 5d9c360..8972097 100644
--- a/OpenSSL/SSL.py
+++ b/OpenSSL/SSL.py
@@ -1,5 +1,5 @@
-import warnings
-from sys import platform
+from warnings import warn
+from sys import platform, version_info
 from functools import wraps, partial
 from itertools import count
 from weakref import WeakValueDictionary
@@ -314,7 +314,12 @@
 
         # Backward compatibility
         if isinstance(cafile, _text_type):
-            warnings.warn("str object in cafile is no longer accepted, use bytes", DeprecationWarning)
+            if version_info.major == 2:
+                warn("unicode in cafile is no longer accepted, use bytes", DeprecationWarning)
+            elif version_info.major == 3:
+                warn("str in cafile is no longer accepted, use bytes", DeprecationWarning)
+            else:
+                warn("text in cafile is no longer accepted, use bytes", DeprecationWarning)
             cafile = cafile.encode('utf-8')
 
         if cafile is None:
@@ -980,7 +985,12 @@
 
         # Backward compatibility
         if isinstance(buf, _text_type):
-            warnings.warn("str object in buf is no longer accepted, use bytes", DeprecationWarning)
+            if version_info.major == 2:
+                warn("unicode in buf is no longer accepted, use bytes", DeprecationWarning)
+            elif version_info.major == 3:
+                warn("str in buf is no longer accepted, use bytes", DeprecationWarning)
+            else:
+                warn("text in buf is no longer accepted, use bytes", DeprecationWarning)
             buf = buf.encode('utf-8')
 
         if isinstance(buf, _memoryview):
@@ -1010,7 +1020,12 @@
 
         # Backward compatibility
         if isinstance(buf, _text_type):
-            warnings.warn("str object in buf is no longer accepted, use bytes", DeprecationWarning)
+            if version_info.major == 2:
+                warn("unicode in buf is no longer accepted, use bytes", DeprecationWarning)
+            elif version_info.major == 3:
+                warn("str in buf is no longer accepted, use bytes", DeprecationWarning)
+            else:
+                warn("text in buf is no longer accepted, use bytes", DeprecationWarning)
             buf = buf.encode('utf-8')
 
         if isinstance(buf, _memoryview):
@@ -1101,7 +1116,12 @@
 
         # Backward compatibility
         if isinstance(buf, _text_type):
-            warnings.warn("str object in buf is no longer accepted, use bytes", DeprecationWarning)
+            if version_info.major == 2:
+                warn("unicode in buf is no longer accepted, use bytes", DeprecationWarning)
+            elif version_info.major == 3:
+                warn("str in vuf is no longer accepted, use bytes", DeprecationWarning)
+            else:
+                warn("text in buf is no longer accepted, use bytes", DeprecationWarning)
             buf = buf.encode("ascii")
 
         if self._into_ssl is None:
diff --git a/OpenSSL/crypto.py b/OpenSSL/crypto.py
index e8b6d3c..b671d9e 100644
--- a/OpenSSL/crypto.py
+++ b/OpenSSL/crypto.py
@@ -1,4 +1,5 @@
-import warnings
+from warnings import warn
+from sys import version_info
 from time import time
 from base64 import b16encode
 from functools import partial
@@ -1956,7 +1957,12 @@
 
         # Backward compatibility
         if isinstance(passphrase, _text_type):
-            warnings.warn("str object in passphrase is no longer accepted, use bytes", DeprecationWarning)
+            if version_info.major == 2:
+                warn("unicode in passphrase is no longer accepted, use bytes", DeprecationWarning)
+            elif version_info.major == 3:
+                warn("str in passphrase is no longer accepted, use bytes", DeprecationWarning)
+            else:
+                warn("text in passphrase is no longer accepted, use bytes", DeprecationWarning)
             passphrase = passphrase.encode('utf-8')
 
         if self._cacerts is None:
@@ -2259,7 +2265,12 @@
 
     # Backward compatibility
     if isinstance(data, _text_type):
-        warnings.warn("str object in passphrase is no longer accepted, use bytes", DeprecationWarning)
+        if version_info.major == 2:
+            warn("unicode in passphrase is no longer accepted, use bytes", DeprecationWarning)
+        elif version_info.major == 3:
+            warn("str in passphrase is no longer accepted, use bytes", DeprecationWarning)
+        else:
+            warn("text in passphrase is no longer accepted, use bytes", DeprecationWarning)
         data = data.encode('utf-8')
 
     digest_obj = _lib.EVP_get_digestbyname(_byte_string(digest))
@@ -2299,7 +2310,12 @@
 
     # Backward compatibility
     if isinstance(data, _text_type):
-        warnings.warn("str object in passphrase is no longer accepted, use bytes", DeprecationWarning)
+        if version_info.major == 2:
+            warn("unicode in passphrase is no longer accepted, use bytes", DeprecationWarning)
+        elif version_info.major == 3:
+            warn("str in passphrase is no longer accepted, use bytes", DeprecationWarning)
+        else:
+            warn("text in passphrase is no longer accepted, use bytes", DeprecationWarning)
         data = data.encode('utf-8')
 
     digest_obj = _lib.EVP_get_digestbyname(_byte_string(digest))
@@ -2396,7 +2412,12 @@
 
     # Backward compatibility
     if isinstance(passphrase, _text_type):
-        warnings.warn("str object in passphrase is no longer accepted, use bytes", DeprecationWarning)
+        if version_info.major == 2:
+            warn("unicode in passphrase is no longer accepted, use bytes", DeprecationWarning)
+        elif version_info.major == 3:
+            warn("str in passphrase is no longer accepted, use bytes", DeprecationWarning)
+        else:
+            warn("text in passphrase is no longer accepted, use bytes", DeprecationWarning)
         passphrase = passphrase.encode('utf-8')
 
     if isinstance(buffer, _text_type):
