`
sparrow82
  • 浏览: 41082 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

使用服务器信任证书,访问https服务器

阅读更多
参考ASIHHPRequest开源项目中的ClientCertificateTests.m源码。
链接:https://github.com/pokeb/asi-http-request/blob/master/Classes/Tests/ClientCertificateTests.m
以及:http://developer.apple.com/library/mac/#documentation/Security/Conceptual/CertKeyTrustProgGuide/iPhone_Tasks/iPhone_Tasks.html

+ (void)testClientCertificate {
	NSURL *httpsUrl = [NSURL URLWithString:@"https://xxxxxx.xx.xx"];

	ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:httpsUrl];
	
	SecIdentityRef identity = NULL;
	SecTrustRef trust = NULL;
        
        //绑定证书,证书放在Resources文件夹中
	NSData *PKCS12Data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"client" ofType:@"p12"]];
	[HttpsTestViewController extractIdentity:&identity andTrust:&trust fromPKCS12Data:PKCS12Data];
	
	request = [ASIHTTPRequest requestWithURL:httpsUrl];
	
	[request setClientCertificateIdentity:identity];
	[request setValidatesSecureCertificate:NO];
	[request startSynchronous];
	
	error = [request error];
	if (!error) {
		NSString *response = [request responseString];
		NSLog(@"response is : %@",response);
	} else {
		NSLog(@"Failed to save to data store: %@", [error localizedDescription]);
		NSLog(@"%@",[error userInfo]);
	}
}

+ (BOOL)extractIdentity:(SecIdentityRef *)outIdentity andTrust:(SecTrustRef*)outTrust fromPKCS12Data:(NSData *)inPKCS12Data {
	OSStatus securityError = errSecSuccess;
	
	CFStringRef password = CFSTR("xxxxxx"); //证书密码
	const void *keys[] =   { kSecImportExportPassphrase };
        const void *values[] = { password };
	
	CFDictionaryRef optionsDictionary = CFDictionaryCreate(NULL, keys,values, 1,NULL, NULL); 
	
	CFArrayRef items = CFArrayCreate(NULL, 0, 0, NULL);
	//securityError = SecPKCS12Import((CFDataRef)inPKCS12Data,(CFDictionaryRef)optionsDictionary,&items);
	securityError = SecPKCS12Import((CFDataRef)inPKCS12Data,optionsDictionary,&items); 
	
	if (securityError == 0) { 
		CFDictionaryRef myIdentityAndTrust = CFArrayGetValueAtIndex (items, 0);
		const void *tempIdentity = NULL;
		tempIdentity = CFDictionaryGetValue (myIdentityAndTrust, kSecImportItemIdentity);
		*outIdentity = (SecIdentityRef)tempIdentity;
		const void *tempTrust = NULL;
		tempTrust = CFDictionaryGetValue (myIdentityAndTrust, kSecImportItemTrust);
		*outTrust = (SecTrustRef)tempTrust;
	} else {
		NSLog(@"Failed with error code %d",(int)securityError);
		return NO;
	}
	return YES;
}

项目中,要添加Security.framework。
分享到:
评论
2 楼 bewithme 2014-01-03  
为啥不要输入密钥库密码?
1 楼 bewithme 2014-01-03  
你好,为啥报

NSLocalizedDescription = "A connection failure occurred";
    NSUnderlyingError = "Error Domain=NSOSStatusErrorDomain Code=-9825 \"The operation couldn\U2019t be completed. (OSStatus error -9825.)

相关推荐

    java实现读取证书访问https接口

    本篇文章将深入探讨如何在Java中实现读取不同格式(如cer、der、crt)的证书,以及如何使用这些证书访问HTTPS接口并获取返回数据。 首先,我们需要了解证书的基本概念。证书通常包含了公钥和一些身份信息,由受信任...

    自签署根证书、服务器证书、客户端证书

    当用户访问一个使用HTTPS的网站时,服务器会提供这个证书,证明其身份。证书包含网站的公钥,用于建立加密连接。自签署的服务器证书同样适用于内部网络或测试环境,但在生产环境中,为了保证用户信任,通常应使用由...

    httpclient访问需要客户端认证数字证书的https接口的处理方法

    1. 使用`InstallCert.java`获取或安装服务器的证书到本地信任存储。 2. 创建一个`KeyManagerFactory`,加载客户端的私钥和证书。 3. 创建一个`TrustManagerFactory`,通常可以设置为`TrustAllManager`,以接受任何...

    解决linux下访问https站点问题:证书无效.docx

    解决 Linux 下访问 HTTPS 站点问题:证书无效 在 Linux 系统中访问 HTTPS 站点时,...解决 Linux 下访问 HTTPS 站点问题:证书无效的问题需要了解 CA 证书的概念和 OpenSSL 工具的使用,以及 Linux 系统的证书库结构。

    IIS6.0 服务器证书安装使用指南

    ### IIS6.0 服务器证书安装使用指南 #### 一、引言 随着互联网技术的发展,网络安全成为了不可忽视的问题。为了确保数据传输的安全性,使用SSL/TLS证书对网站进行加密变得至关重要。本指南旨在详细介绍如何在IIS...

    httpclient来进行https访问

    根据提供的文件信息,我们可以深入探讨如何使用`...通过以上步骤,我们可以使用`httpclient`库安全地进行HTTPS访问,并且可以根据具体需求定制信任管理和异常处理机制。这对于构建安全可靠的网络应用程序至关重要。

    curl 校验服务器证书代码

    当我们访问HTTPS网站时,浏览器会检查服务器的证书,确保其是由可信的CA签发,并且没有过期或被撤销。在某些情况下,我们可能需要自定义证书验证逻辑,例如在使用`curl`时。 在给定的`curl 校验服务器证书代码`场景...

    Android SSL 安全访问HTTPS服务器案例

    但如果服务器使用的是自签名证书或者私有CA签发的证书,需要在代码中添加对这些证书的信任。这通常通过创建一个自定义的`TrustManager`实现,比如`X509TrustManager`,并覆盖其`checkServerTrusted`方法来实现。 2....

    ssl服务器证书(包含ca证书和服务器证书客户端证书)

    当用户访问一个使用SSL的网站时,浏览器会与服务器进行握手过程,这个过程中就会用到SSL证书。证书包含了服务器的公钥,公钥用于加密用户发送给服务器的数据。此外,证书还包含服务器的标识,如域名,以及由CA签名的...

    openssl、libcurl、https访问服务器进行验证,并且得到服务器证书

    本文将深入探讨如何利用openssl工具、libcurl库以及curl命令行工具来访问HTTPS服务器并进行验证,同时获取服务器的证书。 首先,openssl是一个强大的安全套接层(SSL)和传输层安全(TLS)协议工具包,它包含各种...

    java访问https网址下载文件(含证书)

    首先,你需要将服务器的证书导入到一个信任库文件(如JKS或PKCS12格式),然后创建一个`SSLContext`对象,并设置自定义的`TrustManager`。这通常涉及以下步骤: - 导入证书:使用`keytool`命令行工具将服务器证书...

    grafana的https协议证书配置

    Grafana配置Https使用的证书 操作: 第一步:自己制作一个证书使用openssl制作然后填写一些信息,证书就制作成功 第二步:使用我制作好的证书,压缩包里有修改Grafana的grafana.ini,修改配置如下:改protocol 为 ...

    ngrok使用自己的证书通过https访问

    ### 使用Ngrok与自定义SSL证书实现HTTPS访问 #### 一、引言 随着网络安全意识的提高,越来越多的应用和服务开始采用HTTPS协议来保障数据传输的安全性。对于开发测试环境而言,有时我们需要通过HTTPS协议访问本地...

    Java Https请求,跳过证书,直接访问

    然而,在某些情况下,我们可能需要在开发环境中跳过HTTPS的证书验证,以允许与不受信任的服务器进行通信。以下是如何在Java中实现这一功能的详细步骤和相关知识点: 首先,了解HTTPS的工作原理是至关重要的。HTTPS...

    java client访问https server(客户端代码、服务器端配置)

    Java客户端访问HTTPS服务器涉及到的是网络安全通信中的...总之,Java客户端访问HTTPS服务器涉及了SSL/TLS协议的使用、证书和密钥的管理、以及相应的Java代码配置。理解这些概念和技术对于构建安全的网络服务至关重要。

    windows server 2008 R2证书申请及安装配置

    Copy 到编码内,然后证书模版选择 web 服务器,单击提交(注:一定要使用管理员 administrator 登录)。 二、客户端申请证书及下载安装证书 在 Windows 7 上访问网站,要求证书,单击继续浏览。被拒绝。查看证书,...

    调用https协议的webservice,以及证书手动加载

    2. **证书验证**:客户端检查服务器证书的有效性,包括证书是否由可信任的证书颁发机构(CA)签发,证书是否已过期,域名是否匹配等。 3. **密钥交换**:客户端生成一个随机的会话密钥,使用服务器公钥加密,然后...

    CA(证书颁发机构)服务器配置原理与图解过程

    3. **颁发和使用证书**:管理员在CA服务器上手动颁发证书。用户在客户端可以使用申请到的证书,例如在Outlook中设置邮件账户的安全选项,选择证书进行加密和签名。 **图解过程** 在实际操作中,可能会建立一个独立...

Global site tag (gtag.js) - Google Analytics