objective-c - NSTask - 响应来自 OpenSSL 的输入请求

标签 objective-c cocoa ssl-certificate

我似乎在理解 Cocoa 中的 NSTask 时遇到了一些困难。我要启动的应用程序是 openSSL。目前,我可以发送信息(启动路径、参数等),并且还可以使用 NSPipe 获得响应。我需要做的是响应应用程序要求的输入请求。使用以下代码,我可以发送并读取文件中的响应:

 NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: launchPath];
[task setArguments: arguments];
[task setCurrentDirectoryPath:dir];

NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];

NSFileHandle *file;
file = [pipe fileHandleForReading];

[task launch];

NSData *data;
data = [file readDataToEndOfFile];
NSString *response =  [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];

启动 NSTask 后,我需要提供域名、国家/地区等信息。我提出问题的原因是我需要能够使用 openSSL 生成证书签名请求并将其与一些其他数据,传输到服务器。上面的代码没有损坏,我只是不确定如何发送该输入。

此外,如果有人在 Cocoa/ObjC 中使用过某种 openSSL 实现,并且认为这将是比使用 NSTask 更好的选择,我也对此完全持开放态度。

提前致谢。

最佳答案

并不是说有人在看这个,但如果你在看并且还不知道答案,我找到了解决方案,但最终使用了不同的方法。我不会发送额外的输入,而是只传递 -subj 参数。然而,我最初提出的问题的解决方案如下:

NSTask *task = [[NSTask alloc] init];

NSString *tmpdir=NSTemporaryDirectory();
[task setCurrentDirectoryPath:tmpdir];

[task setLaunchPath:@"/usr/bin/openssl"];
NSArray *sslarguments=@[@"req",@"-nodes",@"-newkey",@"rsa:2048",@"-keyout",@"myserver.key",@"-out",@"server.csr"];
[task setArguments:sslarguments];


NSPipe * in = [NSPipe pipe];

[task setStandardInput:in];

NSData *data=[@"GB\nYorks\n\nYork\SimuplanSL\nIT\nsomeone@simuplan.com" dataUsingEncoding:NSUTF8StringEncoding];

[task launch];
[[in fileHandleForWriting] writeData:data];
[task waitUntilExit];

我只需写入临时目录中的文件并通过输入管道提供它。

关于objective-c - NSTask - 响应来自 OpenSSL 的输入请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17702162/

相关文章:

iphone - 我想使用多态性对我的难闻代码进行重构。这是一个删除 'if' 语句的问题

ios - 将数据源分离到 Swift 中的另一个类

java - 证书在不同的机器上显示不同的证书链

php - Google Php Oauth 登录错误找不到系统 CA 包

swift - 如何将 2 张图像合并为 1 张

ssl - haproxy 是否支持 OCSP 进行客户端证书验证

iphone - 如何检索用户当前的城市名称?

当应用程序未连接到 xcode 时,iOS 8 静默推送通知不会触发 didReceiveRemoteNotification 方法

objective-c - 如何将 native C 类型与 performSelectorOnMainThread :? 一起使用

cocoa - 如何使坞站重新加载所有坞站磁贴插件?