【问题标题】:How to implement SSL in client side?如何在客户端实现 SSL?
【发布时间】:2017-09-15 07:50:17
【问题描述】:

我是 Web 开发的新手,目前我正在开发一个供 IOS 应用使用的 Rest API。所以我开发了 API 并在其中实现了带有 oauth2 安全性的 jwt 令牌。现在我想提供移动应用程序使用的 API。所以我的后端服务器有 SSL 证书。所以消费的 Rest API 将类似于

https://server:port/dataapiurl

到目前为止,我已经阅读了有关 SSL 和 JWT 的信息,并且我已经出于不同的原因在哪里 SSL用于客户端服务器通信和之间的加密通道 JWT 用于授权。

所以即使我实现了 JWT 并且通信不是在 SSL 中也没有任何意义。所以为了确保客户端和服务器之间的通信已经完成,客户端(移动应用程序)端必须做什么?

1.移动应用是否需要安装新证书或我们后端服务器的SSL证书?

2.如果是我们后端服务器的SSL证书,那么如何在手机端安装呢?

感谢任何帮助。

【问题讨论】:

    标签: ios ssl jwt spring-security-rest


    【解决方案1】:

    您可以但不能在客户端上设置您的 ssl 证书。 你可以只遵循 NSURLSessionDelegate 协议并实现它:

    - (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler{
    if([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]){
        NSArray* netTrusts = @["your hostname here"];
        if(netTrusts != nil && [netTrusts containsObject:challenge.protectionSpace.host]){
            NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
            completionHandler(NSURLSessionAuthChallengeUseCredential,credential);
        }
    }
    

    }

    【讨论】:

    • 您能否进一步解释一下。实际上我没有明白如何在客户端设置 ssl 证书。因为我是后端开发人员并且我的后端服务器有 SSL 密钥证书,我应该将证书提供给移动应用程序吗?您能否就此提供更多建议
    • 如果你为你的 NSURLSession 实现了一个委托,你可以请求你的服务器,无论是否在你的设备上设置你的证书。在设备上设置证书的主要问题是,每次在服务器上吊销和更新证书时,您都必须更新应用程序证书。使用我在此处编写的代码,您的代理会侦听 ssl 质询,如果您的主机受信任,则代理允许请求结束,而设备上没有证书。
    • 如果你真的想在你的设备上设置你的证书,你可以在 OWASP 网站owasp.org/index.php/Certificate_and_Public_Key_Pinning#iOS找到一种叫做证书固定的方法
    • 那么我是后端开发人员,我的问题是我必须做什么?因为 NSURLSession 应该在移动应用程序(前端)端实现。如果我错了请纠正我
    • 当你的背支持ssl时,客户端应该调整它的请求也支持它:)
    猜你喜欢
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 2010-11-08
    相关资源
    最近更新 更多