我在云端有一个接受套接字请求的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调用实际使用的证书文件在何时何地与服务器通信。
如果有一个关键因素,我要么错过了,要么误解,请告诉我!并提前感谢!
答案 0 :(得分:0)
我找到了答案。我在开放方法中错过了这些行。
他们需要自动化SSL的握手。
inStream?.scheduleInRunLoop(.mainRunLoop(), forMode: NSDefaultRunLoopMode)
outStream?.scheduleInRunLoop(.mainRunLoop(), forMode: NSDefaultRunLoopMode)
我的其他问题仍然可以使用回答。
谢谢!