怎么去做这个?我的客户端是用Objective C编写的,并使用Cocoa的流对象(套接字的包装器). Cocoa流能够将TLS指定为具有Nsstream的setProperty函数的套接字安全级别系统.
但是,似乎必须在打开连接之前完成此 *** 作.如果是这种情况,那么客户端是否应该在从服务器接收代码220(响应STARTTLS)后断开连接,然后在指定TLS时重新连接?
或者说,这只是Nsstream的限制吗?普通套接字是否在不关闭的情况下重新协商TLS或SSL?
此外,一旦STARTTLS发布并且随后的协商完成,客户端是否还有其他编码/解码?
如果这些是简单的问题,请道歉.我很难找到合适的例子.
干杯!
解决方法 我刚刚发现Nsstream允许您通过设置kcfStreamSsllevel属性并重新打开流来将已经活动的非TLS连接升级到TLS.我刚刚在smtp.gmail.com:25的SMTP连接上测试了这个,令人惊讶的是它有效!我正在描述Nsstream / SMTP序列,以防有人感兴趣:NSHost* host = [NSHost hostWithname:address];[Nsstream getStreamsToHost:host port:port inputStream:&is outputStream:&os];[is setDelegate:self];[os setDelegate:self];[is scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];[os scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];[is open];[os open];
SMTP对话,直到我们发送STARTTLS和服务器说OK:
-> 220 mx.Google.com ESMTP gb6sm4472052wbb.0<- EHLO example.address.com-> 250-mx.Google.com at your service,[84.227.165.204]-> 250-SIZE 35882577-> 250-8BITMIME-> 250-STARTTLS-> 250 ENHANCEDSTATUSCODES<- STARTTLS-> 220 2.0.0 Ready to start TLS
此时我们执行以下 *** 作将套接字升级到SSL:
NSMutableDictionary* settings = [NSMutableDictionary dictionary];[settings setobject:NsstreamSocketSecurityLevelNegotiatedSSL forKey:(Nsstring*)kcfStreamSsllevel];[settings setobject:address forKey:(Nsstring*)kcfStreamSSLPeername];[is setProperty:settings forKey:(Nsstring*)kcfStreamPropertySSLSettings];[os setProperty:settings forKey:(Nsstring*)kcfStreamPropertySSLSettings];[is open];[os open];
我们现在可以像以前一样使用is和os.现在可用的AUTH选项证明服务器认为连接是安全的.
<- EHLO example.address.com-> 250-mx.Google.com at your service,[84.227.165.204]-> 250-SIZE 35882577-> 250-8BITMIME-> 250-AUTH LOGIN PLAIN XOAUTH-> 250 ENHANCEDSTATUSCODES<- AUTH PLAIN hIDDeNbAsE64dAtA-> 235 2.7.0 Accepted<- MAIL FROM: <example.address@gmail.com>-> 250 2.1.0 OK gb6sm4472052wbb.0<- RCPT TO: <another.address@gmail.com>-> 250 2.1.5 OK gb6sm4472052wbb.0<- DATA<- From: =?UTF-8?B?QWxlc3NhbmRybyBWb2x6?= <example.address@gmail.com><- To: =?UTF-8?B?QWxl?= <another.address@gmail.com><- Subject: =?UTF-8?B?VGVzdA==?=<- Mime-Version: 1.0;<- Content-Type: text/HTML; charset="UTF-8";<- Content-transfer-encoding: 7bit;<- <- Ciao!<- .-> 354 Go ahead gb6sm4472052wbb.0-> 250 2.0.0 OK 1307994916 gb6sm4472052wbb.0<- QUIT-> 221 2.0.0 closing connection gb6sm4472052wbb.0
我希望这对某人有用……干杯,
总结以上是内存溢出为你收集整理的objective-c – 通过套接字与ESMTP协商TLS全部内容,希望文章能够帮你解决objective-c – 通过套接字与ESMTP协商TLS所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)