跳过主要内容

SSL Pinning for Capacitor Apps

Implement SSL pinning in your Capacitor app to enhance security and protect against MITM attacks while complying with app store guidelines.

马丁·多纳迪厄

马丁·多纳迪厄

内容营销

SSL Pinning for Capacitor Apps

SSL固定可以保护您的应用免受安全威胁,如中间人攻击(MITM),通过在您的应用中直接验证服务器证书。 如果没有它,攻击者就可以截取敏感数据或操纵通信。了解为什么它很重要以及如何有效实施它:

为什么 SSL Pinning 是重要的:

  • 防止 MITM 攻击: 阻止 API 的拦截。
  • 加强安全性: 验证服务器证书以知晓值。
  • 满足 App Store 的要求: 帮助遵守苹果和谷歌的安全标准。
  • 建立用户信任: 在传输过程中保护用户数据。

实施 SSL Pinning 的关键步骤:

  1. 选择合适的插件: 确保与 iOS 和 Android 兼容。
  2. 配置您的应用: 将证书数据嵌入应用设置中。
  3. 平台特定设置:
    • Android: 使用 network_security_config.xml 来定义证书固定项。
    • iOS: 调整 Info.plist 并在运行时验证证书。
  4. 测试您的设置: 使用工具如 Charles Proxy 为了验证安全性。
  5. 管理证书: 定期更新证书并备份以避免停机。

快速比较:Android vs. iOS SSL Pinning

功能 Android iOS
配置文件 network_security_config.xml Info.plist
证书位置 res/raw 目录 应用程序包
验证方法 基于XML的配置 ATS和运行时验证
更新过程 手动或自动 手动或自动

专业提示: 使用工具如__CAPGO_KEEP_0__自动更新证书,以确保平滑、安全的过渡,无需重建应用程序。这可以避免服务中断并保持与应用商店指南的兼容性。 SSL固定是任何Capgo应用程序必须具备的安全措施。它可以保护用户数据和通信。开始今天就开始实施它来增强应用程序的安全性。 __CAPGO_KEEP_0__

__CAPGO_KEEP_0__ Capacitor API

TLS/SSL Certificate Pinning Explained

Setup Requirements

在您的 Capacitor 应用程序

需要小心规划和精确的设置。了解如何有效实施证书固定是必要的。

The first step is selecting a plugin that works well for both iOS and Android while offering strong security features. For Capacitor apps, @capgo/capacitor-ssl-pinning __CAPGO_KEEP_0__

  • 应用程序,@__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-ssl-pinning固定HTTPS连接到iOS和Android上CapacitorHttp的捆绑证书。当比较插件时,请考虑以下因素:
  • 证书管理: 选择一个简化证书管理流程的插件。
  • 易于更新: 选择插件以便在不需要重建整个应用程序的情况下更新证书。
  • 性能考虑: 评估插件对应用程序速度和响应性的影响。

配置您的 Capacitor 框架文档网站

: 选择插件后,下一步是配置您的 Capacitor 应用程序以启用 SSL pinning。以下是您的配置可能是什么样的示例:

Once you’ve chosen a plugin, the next step is to set up your Capacitor app to enable SSL pinning. Here’s an example of what your configuration might look like:

// Example: capacitor.config.ts
{
  appId: 'com.example.app',
  plugins: {
    SSLPinning: {
      certs: ['cert1', 'cert2'],
      validateCertificates: true,
      allowBackup: false
    }
  }
}

: 请逐步推出这些更改以确保用户体验顺畅。设置了基本配置后,继续进行 Android 和 iOS 平台的调整以完成实现。

平台特定设置

设置 SSL pinning 需要为 Android 和 iOS 配置定制的设置,以有效防止 MITM 攻击。

Android 实现

在 Android 上,SSL pinning 包括设置网络安全配置和管理证书。以下是如何进行:

  • 创建网络安全配置

    首先,在 Android 项目的 network_security_config.xml 目录中创建一个名为 res/xml 的文件:

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config>
            <domain includeSubdomains="true">api.example.com</domain>
            <pin-set>
                <pin digest="SHA-256">your_certificate_hash</pin>
                <!-- Backup pin -->
                <pin digest="SHA-256">backup_certificate_hash</pin>
            </pin-set>
        </domain-config>
    </network-security-config>
  • 更新 AndroidManifest.xml 文件

    AndroidManifest.xml 文件中引用刚刚创建的网络安全配置:

    <application
        android:networkSecurityConfig="@xml/network_security_config"
        ...>
  • 添加证书文件

    在您的 Android 项目目录中存储所需的证书文件(.cer.pem)。 res/raw iOS 实现

对于 iOS,SSL pinning 配置通过修改 App Transport Security(ATS)设置和实现运行时证书验证来实现。请遵循以下步骤:

设置 ATS 在 Info.plist 中

  • 在您的应用程序文件中添加以下配置:

    初始化 SSL Pinning 在 __CAPGO_KEEP_0__ 中 Info.plist 使用以下 __CAPGO_KEEP_0__ Snippet 来启用 SSL Pinning 以便在应用程序初始化时:

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <false/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>api.example.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSPinnedDomains</key>
                <true/>
            </dict>
        </dict>
    </dict>
  • Initialize SSL Pinning in Code

    Use the following code snippet to enable SSL pinning during app initialization:

    import { HTTP } from '@ionic-native/http/ngx';
    
    export class AppComponent {
      constructor(private http: HTTP) {
        this.initializeSSLPinning();
      }
    
      async initializeSSLPinning() {
        try {
          await this.http.setSSLCertMode('pinned');
          console.log('SSL Pinning initialized successfully');
        } catch (error) {
          console.error('SSL Pinning initialization failed:', error);
        }
      }
    }

For iOS, SSL pinning is configured by modifying App Transport Security (ATS) settings and implementing runtime certificate validation. Follow these steps:

__CAPGO_KEEP_0__

功能 安卓 iOS
配置文件 network_security_config.xml Info.plist
证书位置 res/raw 目录 应用程序包
验证方法 XML配置 ATS和运行时验证
插件支持 Native + 自定义插件 Native + 自定义插件

接下来,我们将深入探讨测试策略和常见错误,以帮助您确保您的 SSL pinning 设置可靠且安全。

测试和修复

测试您的 SSL pinning 设置至关重要,以防止中间人攻击(MITM)。以下是确保您的实现安全并解决常见问题的方法。

中间人攻击测试

您可以使用代理工具,如 Charles Proxy 来模拟中间人攻击并验证您的 SSL pinning 设置。

Charles Proxy 测试

请遵循以下步骤测试 Charles Proxy:

  1. 在您的设备上安装 Charles 根证书。
  2. 在 Charles 设置中启用 SSL 代理。
  3. 将您的 API 域添加到 SSL 代理列表中。
  4. 配置设备将流量路由到 Charles 代理。

如果您的 SSL pinning 正确实现,测试期间应在应用程序日志中看到证书验证错误。

网络配置测试

使用以下 code snipped 验证使用固定证书的连接:

// Validate pinned certificate connection
try {
    const response = await Http.get({
        url: 'https://api.example.com/test',
        headers: { 'Content-Type': 'application/json' }
    });
    console.log('Connection successful');
} catch (error) {
    console.error('Certificate validation failed:', error);
}

常见错误解决方案

以下是 SSL pinning 的一些典型问题及其解决方案:

错误类型 常见原因 解决方案
证书不匹配 配置中错误的哈希值 使用以下方法验证证书哈希值: OpenSSL.
路径问题 证书位置错误 检查平台特定的证书路径。
格式问题 证书格式错误 将证书转换为正确的格式(例如 PEM 或 DER)。
网络超时 配置错误 检查您的网络安全设置。

验证证书哈希

为了确保证书哈希与您的配置匹配,请使用以下 OpenSSL 命令:

# Generate the correct certificate hash
openssl x509 -in certificate.pem -pubkey -noout | \
openssl rsa -pubin -outform der | \
openssl dgst -sha256 -binary | base64

确保您的证书更新过程正确运行后,处理任何错误。

证书更新测试

在配置中包含主证书和备份证书,以防止更新期间服务中断。

更新测试流程

以下是一个测试证书轮换的示例:

// Rotate certificates
const certificates = {
    current: 'sha256/current_certificate_hash',
    backup: 'sha256/backup_certificate_hash'
};

// Test both certificates
async function validateCertificates() {
    try {
        await testConnection(certificates.current);
        console.log('Primary certificate valid');
    } catch {
        try {
            await testConnection(certificates.backup);
            console.log('Backup certificate valid');
        } catch {
            console.error('All certificates invalid');
        }
    }
}

监控证书过期

定期检查证书过期时间,以避免中断:

# Check certificate expiration date
openssl x509 -enddate -noout -in certificate.pem

最后,测试您的设置在各种条件下,包括稳定WiFi、移动数据、离线场景和网络转换,确保强大的安全性和功能性。

SSL固定管理

一旦您的SSL固定设置就绪,下一步就是管理证书和密钥固定,以维持长期的强大安全性。

证书固定与密钥固定

当它来到SSL固定时,有两种主要方法:证书固定和公钥固定。每种方法都有其独特的优势,尤其是 Capacitor 应用:

功能 证书固定 公钥固定
安全等级 高 – 固定整个证书 极高 – 只固定公钥
维护 每次续期都需要更新 更新频率较低,续期后仍可使用
实施 更容易实施 更复杂的初始设置
存储影响 更大的存储占用 最小的存储要求
更新频率 每次证书更新 只有当公钥发生变化时

本次分解可以帮助您决定哪种方法与您的应用的长期维护策略最为匹配。

自动更新证书

保持证书更新至关重要以确保API通信的安全性。Capgo提供了一个流程化的解决方案,通过自动更新这些证书,避免了需要重新提交应用商店的需求。以下是它提供的内容:

  • 快速采用率:更新是分阶段的,跟踪并在24小时内实现95%的采用率 [1].
  • 加密传输: 全程加密传输.
  • 实时监控: 分析工具提供更新成功率的数据.

如何实施:

  • 设置自动更新
    : 将Capgo的CI/CD管道与证书更新自动化。Capgo的计划从每月12美元开始,包括OTA更新和约15个本机构建/月。额外的构建分钟以分钟计费,通过积分计费.

  • 跟踪证书指标
    : 使用Capgo的分析仪表板监控关键指标,例如全球更新成功率,目前为82%。 [1].

这些措施有助于保护您的应用程序免受潜在的中间人攻击.

应用商店安全指南

: Apple App Store和Google Play Store都对SSL pinning的安全要求非常严格。以下是他们的期望:

Apple App Store:

  • 必须使用端到端加密更新证书。
  • 证书验证必须正确。
  • 安全文档在审查过程中是必需的。

Google Play Store:

  • 必须使用批准的机制更新。
  • 证书管理的透明度至关重要。
  • 必须设置fallback机制。

Capgo的解决方案符合所有这些要求,同时启用即时更新。 [1]为了实现强大的安全策略,考虑将传统的应用商店更新与Capgo的实时更新结合起来。这一混合策略可以确保您的应用始终保持安全和合规,而无需延迟。

结论

为了保护您的Capacitor应用免受中间人攻击,实施SSL固定是必不可少的。通过将信任的证书数据直接嵌入您的应用,您可以显著增强您的API通信的安全性。

为了实现成功的实施,务必牢记以下关键方面:

  • 证书管理: 定期更新和监控证书以防止潜在的服务中断是首要任务。
  • 开发工作流程: 在测试环境中实施绕过机制,同时确保生产构建中严格的安全协议在位。
  • 平台指南: 遵守苹果应用商店和谷歌应用商店的安全要求,以确保符合性。

SSL pinning 在保护用户数据和维护应用完整性方面起着至关重要的作用。当与前面讨论的更广泛的安全措施结合时,它有助于创建一个更安全的应用环境。

常见问题

::: faq

如果不在Capacitor应用中设置SSL pinning,可能会出现哪些风险?

如果在Capacitor应用中没有设置SSL pinning,那么该应用就更容易受到 中间人攻击(MITM)这些攻击允许恶意分子拦截和篡改应用程序与其服务器之间流动的数据。 这可能导致敏感信息,如用户凭据或 API 密钥.

此外,没有SSL固定,攻击者可以使用假或被破坏的证书冒充受信任的服务器。这增加了数据泄露的可能性。通过实施SSL固定,您可以确保安全通信并保护您的用户免受这些风险。

:::

What are the key differences in implementing and maintaining SSL pinning for Android and iOS in Capacitor apps?

在__CAPGO_KEEP_0__应用程序中实施和维护Android和iOS的SSL固定有什么主要区别?

SSL固定在Android和iOS上工作方式略有不同,这是由于它们独特的API和安全设置。 Android

上,开发人员通常依赖于网络库,如OkHttp或使用本机设置来设置SSL固定。然而,当更新固定证书时,通常需要发布应用程序的新版本。 ,SSL pinning 通常通过 URLSession 或第三方库来处理。与 Android 一样,任何证书更新都需要小心管理,以确保 API 通信不中断。

两种平台都需要持续关注证书过期和更新,以确保 API 连接安全。定期测试至关重要,以早期捕捉兼容性问题并防止 中间人攻击。 attacks. :::

::: faq

How can I automate SSL certificate updates and ensure my Capacitor app complies with app store security requirements?

如何可以自动更新 SSL 证书并确保我的 __CAPGO_KEEP_0__ 应用程序符合应用商店安全要求? 虽然该文章没有深入探讨自动化 SSL 证书更新或确保应用商店安全指南的工具或策略,但您可以采取步骤来提高应用程序的安全性。一个有效的措施是在 __CAPGO_KEEP_0__ 应用程序中实施 in your Capacitor app. This helps safeguard your app from ,这有助于保护应用程序免受中间人攻击

,这可能会损害敏感数据。 Capgo 可以成为游戏的转折点。它们使开发者能够更轻松地推出更新,同时遵守应用商店的规定,从而为开发者和用户提供更流畅的体验。

继续使用 SSL Pinning 的 Capacitor 应用

如果您正在使用 SSL Pinning 的 Capacitor 应用 来规划安全性和合规性,连接它与 加密 加密的实现细节 合规 合规的实现细节 Capgo 安全扫描器 Capgo 安全扫描器的产品工作流 Capgo 安全 为 Capgo 安全中的产品工作流程 Capgo 信任中心 为 Capgo 信任中心中的产品工作流程

实时更新Capacitor应用

当web层bug出现时,通过Capgo将修复推送给用户,而不是等待几天的应用商店审批。用户在后台接收更新,而原生代码仍在正常审查路径中。

来自 Martin 的人性化支持

立即开始

最新博客

Capgo 为您提供了创建真正专业的移动应用所需的最佳见解。