簡體   English   中英

如何找出我的SSL設置有什么問題?

[英]How can I find out what's wrong with my SSL setup?

我有一台Windows服務器,帶有正確的SSL信任鏈。 在此服務器上,為我的voip應用程序運行一個nodejs信令服務器。 我曾經在CentOS上運行nodejs服務器,但是不久前它已遷移到Windows。 我暫時在應用程序中禁用了SSL,但現在再次啟用它,就無法連接“ CFNetwork SSLHandshake failed(-9824)”消息。

我知道沒有人可以幫助我找出問題所在,但我希望蘋果能提供更具描述性的信息。 9824只是表示“握手失敗”,並且設備日志中沒有顯示任何特殊內容。 我補充說:

setenv("CFNETWORK_DIAGNOSTICS", "3", 1);

並檢查了它產生的日志,但它只告訴我握手失敗://我嘗試添加

CFReadStreamSetProperty(readStream, kCFStreamSSLValidatesCertificateChain, kCFBooleanFalse);
CFWriteStreamSetProperty(writeStream, kCFStreamSSLValidatesCertificateChain, kCFBooleanFalse);

到套接字初始化,看看是否允許我連接,但沒有。 我還添加了一個奇怪的info.plist代碼段,以允許在iOS9上使用TLS1.0而不是TLS1.2,但是即使那樣也沒有任何改變。

所以我的問題是:我怎么會得到足夠的信息來開始調試這個爛攤子? 我知道握手失敗了,Apple,但我想知道為什么失敗了...

編輯:抱歉,格式不正確,我很忙:)

這是我的套接字初始化代碼:

APP.onlineUsers = [[NSMutableArray alloc] init];

self.didOpenInputStream = NO;
self.didOpenOutputStream = NO;

self.messageQueue = [[NSMutableArray alloc] init];

CFReadStreamRef readStream;
CFWriteStreamRef writeStream;

NSInputStream* inputStream;
NSOutputStream* outputStream;

CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)serverUrl, (uint)serverPort, &readStream, &writeStream);

CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);

CFReadStreamSetProperty(readStream, kCFStreamSSLValidatesCertificateChain, kCFBooleanFalse);//tried without this as well
CFWriteStreamSetProperty(writeStream, kCFStreamSSLValidatesCertificateChain, kCFBooleanFalse);//tried without this as well

CFReadStreamSetProperty(readStream, kCFStreamPropertySocketSecurityLevel, kCFStreamSocketSecurityLevelSSLv3);//tried v2 this as well
CFWriteStreamSetProperty(writeStream, kCFStreamPropertySocketSecurityLevel, kCFStreamSocketSecurityLevelSSLv3);//tried v2 this as well

inputStream = (__bridge_transfer NSInputStream*)readStream;
outputStream = (__bridge_transfer NSOutputStream*)writeStream;

[inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType];

[inputStream setDelegate:self];
[outputStream setDelegate:self];

self.runLoop = [NSRunLoop currentRunLoop];

[inputStream scheduleInRunLoop:self.runLoop forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:self.runLoop forMode:NSDefaultRunLoopMode];

[inputStream open];
[outputStream open];

self.inputStream = inputStream;
self.outputStream = outputStream;

最有可能的問題是您的服務器不兼容“ ATS”。 從iOS 9開始,ATS為設備帶來了強制的安全性。 OS X 10.11。 特別是你需要

  • 服務器端的TLS 1.2,
  • 未使用SHA加密的證書(無2)。

如果服務器不滿足此要求,則可以按此處所述關閉該服務器的ATS。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM