如何在Swift中使用自生成的ssl证书和NSStream

时间:2016-08-16 15:20:36

标签: swift xcode macos ssl nsstream

我在云端有一个接受套接字请求的python服务器。我有一个Swift(xCode)客户端应用程序,它使用NS(输入/输出)putstreams与python服务器应用程序进行通信。

我在服务器上生成了自己的SSL证书和密钥文件。

在我的服务器端注释掉SSL包装代码,我可以让我的客户端和服务器说得很好。使用SSL,我得到握手错误。

服务器和客户端都使用TLSV1进行安全级别协议。

在mac端,我安装了我的服务器证书文件并允许在我的用户密钥链中使用,但我认为应用程序不会在那里查找可信证书。

是否有办法直接在xCode应用程序中以实用方式为NSStream指定证书文件。或者在应用程序上安装证书的方法?

我知道在python中使用SSL包装套接字时,您可以告诉它它是一个客户端并使用路径中的特定证书文件。有MacOS Swift的等价物吗?

或者我这样做错了吗?

以下是我的" Light Socket"斯威夫特班。最简单,但在两端不使用SSL时都能正常工作。

var stripe = require('stripe');
var stripeInstance; // undefined on startup

exports.handler = function (event, context, callback) {
  // now define stripeInstance if its not already defined
  if(!stripeInstance) {
    stripeInstance = stripe(getKey(event.stage, 'STRIPE_SECRET_KEY'));
  }
  // now all functions will be able to use the same instance of stripe. 
  // This assumes the event.stage is always the same, if you need a new instance for every request then remove the if statement
  // rename all references of stripe to stripeInstance
  ...

我从其他一些帖子中收集了所有这些内容,但是没有找到任何提及swift调用实际使用的证书文件在何时何地与服务器通信。

如果有一个关键因素,我要么错过了,要么误解,请告诉我!并提前感谢!

1 个答案:

答案 0 :(得分:0)

我找到了答案。我在开放方法中错过了这些行。

他们需要自动化SSL的握手。

inStream?.scheduleInRunLoop(.mainRunLoop(), forMode: NSDefaultRunLoopMode)
outStream?.scheduleInRunLoop(.mainRunLoop(), forMode: NSDefaultRunLoopMode)

我的其他问题仍然可以使用回答。

谢谢!