[pgsqlclient-checkins] pgsqlclient_10/Mono.Security.Protocol.Tls/Mono.Security.Protocol.Tls/Mono.Sec
Status: Inactive
Brought to you by:
carlosga_fb
Update of /cvsroot/pgsqlclient/pgsqlclient_10/Mono.Security.Protocol.Tls/Mono.Security.Protocol.Tls/Mono.Security.Protocol.Tls.Handshake/Mono.Security.Protocol.Tls.Handshake.Client In directory sc8-pr-cvs1:/tmp/cvs-serv31455 Modified Files: TlsServerCertificate.cs Log Message: 2003-12-09 Carlos Guzmán Álvarez <car...@te...> * Mono.Security.Protocol.Handshake.Client/TlsServerCertificate.cs: - Retrict certificate validation to the first validation. ( real validation needs to be made using a chain ) - Improved domain validation by making a IP checking between the target host IP and the certificate domain IP. - Fixed error list handling on certificate validation. Index: TlsServerCertificate.cs =================================================================== RCS file: /cvsroot/pgsqlclient/pgsqlclient_10/Mono.Security.Protocol.Tls/Mono.Security.Protocol.Tls/Mono.Security.Protocol.Tls.Handshake/Mono.Security.Protocol.Tls.Handshake.Client/TlsServerCertificate.cs,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** TlsServerCertificate.cs 25 Nov 2003 12:36:06 -0000 1.13 --- TlsServerCertificate.cs 9 Dec 2003 19:21:33 -0000 1.14 *************** *** 24,27 **** --- 24,28 ---- using System; + using System.Net; using System.Collections; using System.Text.RegularExpressions; *************** *** 90,97 **** readed += certLength; - - this.validateCertificate(certificate); } } } --- 91,101 ---- readed += certLength; } } + + #warning Correct validation needs to be made using a certificate chain + + // Restrict validation to the first certificate + this.validateCertificate(certificates[0]); } *************** *** 102,111 **** private void validateCertificate(X509Certificate certificate) { ! int[] certificateErrors = new int[0]; // 1 step : Validate dates if (!certificate.IsCurrent) { ! #warning "Add error to the list" } --- 106,115 ---- private void validateCertificate(X509Certificate certificate) { ! ArrayList errors = new ArrayList(); // 1 step : Validate dates if (!certificate.IsCurrent) { ! errors.Add(0x800B0101); } *************** *** 124,132 **** if (!this.checkDomainName(certificate.SubjectName)) { ! #warning "Add error to the list" } ! if (certificateErrors.Length > 0) { if (!this.Context.SslStream.RaiseServerCertificateValidation( new X509Cert.X509Certificate(certificate.RawData), --- 128,143 ---- if (!this.checkDomainName(certificate.SubjectName)) { ! errors.Add(0x800B010F); } ! if (errors.Count > 0) { + int[] certificateErrors = new int[errors.Count]; + + for (int i = 0; i < certificateErrors.Length; i++) + { + certificateErrors[i] = Convert.ToInt32(errors[i]); + } + if (!this.Context.SslStream.RaiseServerCertificateValidation( new X509Cert.X509Certificate(certificate.RawData), *************** *** 155,159 **** } ! return (this.Context.ClientSettings.TargetHost == domainName); } --- 166,183 ---- } ! if (domainName == String.Empty) ! { ! return false; ! } ! else ! { ! string targetHost = this.Context.ClientSettings.TargetHost; ! ! // Check that the IP is correct ! IPAddress ipHost = Dns.Resolve(targetHost).AddressList[0]; ! IPAddress ipDomain = Dns.Resolve(domainName).AddressList[0]; ! ! return (ipHost.Address == ipDomain.Address); ! } } |