c# - Android 应用程序和 ASP.net api 之间的安全通信

标签 c# android web-services https

我的 Android 应用程序应该与用 C#.Net 编写的 ASP.net Web API 进行通信。从手机发送的数据包含不应向公众公开的数据。所以我尝试使用 https 协议(protocol)。在我的服务器端,我要求所有请求都是 HTTPS,如下所示:

需要注册Imei

public class RequireRegisteredImeiAttribute : AuthorizationFilterAttribute
    {
        public override void OnAuthorization(HttpActionContext actionContext)
        {
            var request = actionContext.ControllerContext.Request;

            if (request.RequestUri.Scheme == Uri.UriSchemeHttps)
            {
               //OKAY
            }
            else 
            {
             actionContext.Response = new HttpResponseMessage(HttpStatusCode.Forbidden);
            }
        }
     }

在 Controller 中:

[RequireRegisteredImei]
public string Post()
{
}

我通过从手机发送一个简单的http请求来调试这段代码,这段代码运行得很好,它会拒绝我。

因此,我开始研究如何从 Android 手机通过 https 发送请求。我想出了这样的事情:

public static DefaultHttpClient getSecureHttpClient() {
        SchemeRegistry schemeRegistry = new SchemeRegistry();
        schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
        schemeRegistry.register(new Scheme("http", SSLSocketFactory.getSocketFactory(), 80));
        BasicHttpParams params = new BasicHttpParams();
        SingleClientConnManager mgr = new SingleClientConnManager(params, schemeRegistry);
        return new DefaultHttpClient(mgr, params);
    }

我这样使用这个方法:

HttpClient httpClient = CustomHttpClient.getSecureHttpClient();

这只会导致IOException:没有对等证书

我已经阅读了几个与此相关的主题:

Problems with https (No peer certificate) in android

Android SSL - No Peer Certificate

'No peer certificate' error in Android 2.3 but NOT in 4

但是必须有一种更简单的方法来从 Android 通过 HTTPS 发布数据吗?

最佳答案

如果您有自定义证书或由 CA 颁发的证书(未包含在所有 Android 版本中),您可以将该证书包含到您的应用中并直接使用它。

为此,您必须将服务器证书(当然没有 key )导入到 BKS key 存储中,然后可以将其用作自定义信任存储。

Using a Custom Certificate Trust Store on Android 是一个非常好的教程,描述了如何执行此操作。

与您在 Stackoverflow 中发现的 EasyTrustManager 或 DummyTrustManager 等标准解决方案不同,该解决方案不会禁用 SSL 身份验证,因此不像其他解决方案那样不安全。

关于c# - Android 应用程序和 ASP.net api 之间的安全通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14435712/

相关文章:

c# - azure 项目出错

android - 将下载的图像保存在 Android 的图库中

java - 改造在onResponse方法之外返回null?

.net - Visual Studio/SOAP - 'Add Service Reference' 与 'Add Web Service Reference'

ios - 如何向 iOS 中的所有 Controller 发送通知

C# 类设计 - 我可以使用什么来代替 "static abstract"?

c# - VirtueMart API 连接/网络引用

c# - 根据参数获取员工子集

android - 如何在 retrofit2 android 中解析来自多部分表单数据请求的响应

javascript - 写一个手机电台APP——Javascript/HTML/CSS可行吗,还是需要原生化?