add eq/ne support to SubjectAlternativeName
diff --git a/src/cryptography/x509.py b/src/cryptography/x509.py
index b0a4a35..8e9c1ac 100644
--- a/src/cryptography/x509.py
+++ b/src/cryptography/x509.py
@@ -914,6 +914,15 @@
     def __repr__(self):
         return "<SubjectAlternativeName({0})>".format(self._general_names)
 
+    def __eq__(self, other):
+        if not isinstance(other, SubjectAlternativeName):
+            return NotImplemented
+
+        return self._general_names == other._general_names
+
+    def __ne__(self, other):
+        return not self == other
+
 
 class AuthorityKeyIdentifier(object):
     def __init__(self, key_identifier, authority_cert_issuer,
diff --git a/tests/test_x509_ext.py b/tests/test_x509_ext.py
index 2852776..5d54da1 100644
--- a/tests/test_x509_ext.py
+++ b/tests/test_x509_ext.py
@@ -1077,6 +1077,25 @@
             "<SubjectAlternativeName([<DNSName(value=cryptography.io)>])>"
         )
 
+    def test_eq(self):
+        san = x509.SubjectAlternativeName(
+            [x509.DNSName(u"cryptography.io")]
+        )
+        san2 = x509.SubjectAlternativeName(
+            [x509.DNSName(u"cryptography.io")]
+        )
+        assert san == san2
+
+    def test_ne(self):
+        san = x509.SubjectAlternativeName(
+            [x509.DNSName(u"cryptography.io")]
+        )
+        san2 = x509.SubjectAlternativeName(
+            [x509.RFC822Name(u"admin@cryptography.io")]
+        )
+        assert san != san2
+        assert san != object()
+
 
 @pytest.mark.requires_backend_interface(interface=RSABackend)
 @pytest.mark.requires_backend_interface(interface=X509Backend)