Disable SSLv2 by default as it is insecure.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@28336 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2009-06-09 08:32:16 +00:00
parent 01d0fe9852
commit f0712303f8
3 changed files with 35 additions and 1 deletions

View file

@ -1,3 +1,8 @@
2009-06-09 Richard Frith-Macdonald <rfm@gnu.org>
* SSL/Source/GSSSLHandle.m: Disable v2 by default due to
security issues. GSPermitSSLv2 user default can enable it again.
2009-06-08 Richard Frith-Macdonald <rfm@gnu.org>
* Source/Additions/Unicode.m: Optimise somewhat for converting

View file

@ -122,11 +122,21 @@ sslError(int err)
PEMpasswd: (NSString*)PEMpasswd;
@end
static BOOL permitSSLv2 = NO;
@implementation GSSSLHandle
+ (void) _defaultsChanged: (NSNotification*)n
{
permitSSLv2
= [[NSUserDefaults standardUserDefaults] boolForKey: @"GSPermitSSLv2"];
}
+ (void) initialize
{
if (self == [GSSSLHandle class])
{
NSUserDefaults *defs;
SSL_library_init();
/*
@ -140,6 +150,13 @@ sslError(int err)
inf = [[[NSProcessInfo processInfo] globallyUniqueString] UTF8String];
RAND_seed(inf, strlen(inf));
}
defs = [NSUserDefaults standardUserDefaults];
permitSSLv2 = [defs boolForKey: @"GSPermitSSLv2"];
[[NSNotificationCenter defaultCenter]
addObserver: self
selector: @selector(_defaultsChanged:)
name: NSUserDefaultsDidChangeNotification
object: nil];
}
}
@ -186,6 +203,10 @@ sslError(int err)
if (ctx == 0)
{
ctx = SSL_CTX_new(SSLv23_server_method());
if (permitSSLv2 == NO)
{
SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2);
}
}
if (ssl == 0)
{
@ -288,6 +309,10 @@ sslError(int err)
if (ctx == 0)
{
ctx = SSL_CTX_new(SSLv23_client_method());
if (permitSSLv2 == NO)
{
SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2);
}
}
if (ssl == 0)
{
@ -405,6 +430,10 @@ sslError(int err)
if (ctx == 0)
{
ctx = SSL_CTX_new(SSLv23_method());
if (permitSSLv2 == NO)
{
SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2);
}
}
if ([PEMpasswd length] > 0)
{

View file

@ -433,7 +433,7 @@ static gnutls_anon_client_credentials_t anoncred;
else if ([proto isEqualToString: NSStreamSocketSecurityLevelSSLv2] == YES)
{
proto = NSStreamSocketSecurityLevelSSLv2;
GSOnceMLog(@"NSStreamSocketSecurityLevelTLSv1 is insecure ..."
GSOnceMLog(@"NSStreamSocketSecurityLevelTLSv2 is insecure ..."
@" not implemented");
DESTROY(self);
return nil;