移动端配置SSL证书,不同系统有不同的方法,以下是Android和iOS系统的常见配置方式:
Android系统
使用Network Security Config(Android 7.0及以上):
- 在项目的
res/xml
目录下创建一个network_security_config.xml
文件。在文件中可以指定信任的证书、证书颁发机构等。例如:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config> <trust-anchors> <certificates src="@raw/my_ca_cert" /> </trust-anchors> </base-config> </network-security-config>
- 在
AndroidManifest.xml
文件中,通过android:networkSecurityConfig
属性引用刚才创建的配置文件:
<application ... android:networkSecurityConfig="@xml/network_security_config"> ... </application>
- 在项目的
使用TrustManager(支持较低版本Android):
- 首先获取SSL证书,通常以
.crt
或.pem
格式存在。将证书转换为InputStream
。 - 然后加载证书,创建
KeyStore
,并初始化SSLContext
。以下是示例代码:
InputStream certInput = // 输入你的证书文件 KeyStore keyStore = KeyStore.getInstance("PKCS12"); keyStore.load(certInput, "your_password".toCharArray()); TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(keyStore); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, trustManagerFactory.getTrustManagers(), null);
- 最后,在使用网络请求的地方,如
OkHttp
或HttpsURLConnection
中,应用这个sslContext
。
- 首先获取SSL证书,通常以
iOS系统
- 准备SSL证书文件:获取以
.cer
或.p12
为扩展名的SSL证书文件。 - 将SSL证书文件添加到项目中:把证书文件拖入Xcode项目中,确保勾选“Copy items if needed”选项,使证书文件包含在应用包中。
- 编写网络请求代码:通常使用
URLSession
来管理网络请求。例如创建一个URL
对象,指向API端点,然后创建一个数据任务来发送请求并处理响应。 配置
NSURLSession
以使用SSL:实现一个自定义的URLSessionDelegate
来处理服务器证书验证。示例代码如下:func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { if let serverTrust = challenge.protectionSpace.serverTrust { let credential = URLCredential(trust: serverTrust) completionHandler(.useCredential, credential) } else { completionHandler(.cancelAuthenticationChallenge, nil) } } }
- 测试及验证SSL连接:运行应用程序,检查是否能成功连接到API,查看是否能从SSL保护的服务器返回数据。
评论已关闭