[Mono.Security]: Make MonoTlsProviderFactory.CreateHttpListener() take 'X509Certifica...
authorMartin Baulig <martin.baulig@xamarin.com>
Fri, 6 Nov 2015 21:40:29 +0000 (16:40 -0500)
committerMartin Baulig <martin.baulig@xamarin.com>
Tue, 10 Nov 2015 20:31:21 +0000 (15:31 -0500)
(cherry picked from commit 3d81daf796c00e3a37bdb20aacbaaa3b5769466d)

mcs/class/Mono.Security/Mono.Security.Interface/MonoTlsProviderFactory.cs
mcs/class/System/Mono.Net.Security/ChainValidationHelper.cs
mcs/class/System/Mono.Net.Security/MonoTlsProviderFactory.cs
mcs/class/System/Mono.Net.Security/NoReflectionHelper.cs
mcs/class/System/System.Net/EndPointListener.cs
mcs/class/System/System.Net/HttpConnection.cs
mcs/class/System/System.Net/HttpListener.cs

index 1c7035addf4cd739bf233fd93aa36ba5197b9232..41ff61e243e675c8b4e8bdd8187d04c6e9265c63 100644 (file)
@@ -93,7 +93,7 @@ namespace Mono.Security.Interface
                        return NoReflectionHelper.CreateHttpsRequest (requestUri, provider, settings);
                }
 
-               public static HttpListener CreateHttpListener (X509Certificate2 certificate, MonoTlsProvider provider = null, MonoTlsSettings settings = null)
+               public static HttpListener CreateHttpListener (X509Certificate certificate, MonoTlsProvider provider = null, MonoTlsSettings settings = null)
                {
                        return (HttpListener)NoReflectionHelper.CreateHttpListener (certificate, provider, settings);
                }
index 63caf2a0cd9f803cbc9349e42b322a8b5856f36f..ac184d963f13a7e1920ec33e954345db397f5e31 100644 (file)
@@ -240,7 +240,7 @@ namespace Mono.Net.Security
                        var certs = new XX509CertificateCollection ();
                        certs.Add (new X509Certificate2 (certificate.GetRawCertData ()));
 
-                       var result = ValidateChain (string.Empty, false, certs, (SslPolicyErrors)errors);
+                       var result = ValidateChain (string.Empty, true, certs, (SslPolicyErrors)errors);
                        if (result == null)
                                return false;
 
@@ -249,13 +249,13 @@ namespace Mono.Net.Security
 
                public ValidationResult ValidateClientCertificate (XX509CertificateCollection certs)
                {
-                       return ValidateChain (string.Empty, false, certs, 0);
+                       return ValidateChain (string.Empty, true, certs, 0);
                }
 
                public ValidationResult ValidateChain (string host, XX509CertificateCollection certs)
                {
                        try {
-                               var result = ValidateChain (host, true, certs, 0);
+                               var result = ValidateChain (host, false, certs, 0);
                                if (tlsStream != null)
                                        tlsStream.CertificateValidationFailed = result == null || !result.Trusted || result.UserDenied;
                                return result;
index a401de63006887cebc99b27ee79c0b652a157244..1f066e1fcfea1aae2a650886882a0a03c821f104 100644 (file)
@@ -258,7 +258,7 @@ namespace Mono.Net.Security
                        }
                }
 
-               internal static HttpListener CreateHttpListener (X509Certificate2 certificate, MSI.MonoTlsProvider provider, MSI.MonoTlsSettings settings)
+               internal static HttpListener CreateHttpListener (X509Certificate certificate, MSI.MonoTlsProvider provider, MSI.MonoTlsSettings settings)
                {
                        lock (locker) {
                                var internalProvider = provider != null ? new Private.MonoTlsProviderWrapper (provider) : null;
index 641921390531f1bd56bd6d2255e5d87a433eb119..baf83f33e9fb1ceb6560654722d793a53d57b88a 100644 (file)
@@ -104,7 +104,7 @@ namespace Mono.Net.Security
                internal static object CreateHttpListener (object certificate, object provider, object settings)
                {
                        #if SECURITY_DEP
-                       return MonoTlsProviderFactory.CreateHttpListener ((X509Certificate2)certificate, (MSI.MonoTlsProvider)provider, (MSI.MonoTlsSettings)settings);
+                       return MonoTlsProviderFactory.CreateHttpListener ((X509Certificate)certificate, (MSI.MonoTlsProvider)provider, (MSI.MonoTlsSettings)settings);
                        #else
                        throw new NotSupportedException ();
                        #endif
index d5a1d484dee6b671f97228667b5cfd062e7c9c12..8080354f806b23f753ff4af389f9cb4efe211f3a 100644 (file)
@@ -53,7 +53,7 @@ namespace System.Net {
                Hashtable prefixes;  // Dictionary <ListenerPrefix, HttpListener>
                ArrayList unhandled; // List<ListenerPrefix> unhandled; host = '*'
                ArrayList all;       // List<ListenerPrefix> all;  host = '+'
-               X509Certificate2 cert;
+               X509Certificate cert;
                bool secure;
                Dictionary<HttpConnection, HttpConnection> unregistered;
 
@@ -107,7 +107,7 @@ namespace System.Net {
                        if (accepted == null)
                                return;
 
-                       if (epl.secure && (epl.cert == null || !epl.cert.HasPrivateKey)) {
+                       if (epl.secure && epl.cert == null) {
                                accepted.Close ();
                                return;
                        }
index 729ee39cbca5237550c80b568a0a26d0030f6c27..7adfdf8d95660c51e673d3304118705a55d19d0a 100644 (file)
@@ -74,7 +74,7 @@ namespace System.Net {
                int reuses;
                bool context_bound;
                bool secure;
-               X509Certificate2 cert;
+               X509Certificate cert;
                int s_timeout = 90000; // 90k ms for first request, 15k ms from then on
                Timer timer;
                IPEndPoint local_ep;
@@ -83,7 +83,7 @@ namespace System.Net {
                X509Certificate2 client_cert;
                IMonoSslStream ssl_stream;
 
-               public HttpConnection (Socket sock, EndPointListener epl, bool secure, X509Certificate2 cert)
+               public HttpConnection (Socket sock, EndPointListener epl, bool secure, X509Certificate cert)
                {
                        this.sock = sock;
                        this.epl = epl;
index 4bba9e31f9c79d38da44d98cc2e0e8fa27e8d92c..15580d3b70514fb650dff0c92f64886a4379a72a 100644 (file)
@@ -62,7 +62,7 @@ namespace System.Net {
 
                IMonoTlsProvider tlsProvider;
                MSI.MonoTlsSettings tlsSettings;
-               X509Certificate2 certificate;
+               X509Certificate certificate;
 
                Hashtable registry;   // Dictionary<HttpListenerContext,HttpListenerContext> 
                ArrayList ctx_queue;  // List<HttpListenerContext> ctx_queue;
@@ -79,7 +79,7 @@ namespace System.Net {
                        auth_schemes = AuthenticationSchemes.Anonymous;
                }
 
-               internal HttpListener (X509Certificate2 certificate, IMonoTlsProvider tlsProvider, MSI.MonoTlsSettings tlsSettings)
+               internal HttpListener (X509Certificate certificate, IMonoTlsProvider tlsProvider, MSI.MonoTlsSettings tlsSettings)
                        : this ()
                {
                        this.certificate = certificate;
@@ -87,7 +87,7 @@ namespace System.Net {
                        this.tlsSettings = tlsSettings;
                }
 
-               internal X509Certificate2 LoadCertificateAndKey (IPAddress addr, int port)
+               internal X509Certificate LoadCertificateAndKey (IPAddress addr, int port)
                {
                        lock (registry) {
                                if (certificate != null)
@@ -104,8 +104,9 @@ namespace System.Net {
                                        string pvk_file = Path.Combine (path, String.Format ("{0}.pvk", port));
                                        if (!File.Exists (pvk_file))
                                                return null;
-                                       certificate = new X509Certificate2 (cert_file);
-                                       certificate.PrivateKey = PrivateKey.CreateFromFile (pvk_file).RSA;
+                                       var cert = new X509Certificate2 (cert_file);
+                                       cert.PrivateKey = PrivateKey.CreateFromFile (pvk_file).RSA;
+                                       certificate = cert;
                                        return certificate;
                                } catch {
                                        // ignore errors