跳过主要内容

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通信和保护用户数据。立即开始实施以增强应用程序的安全性。 基于XML的配置

ATS和运行时验证 Capacitor app to secure API communications and protect user data. Start implementing it today to enhance your app’s security.

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
    }
  }
}

应用

平台特定设置

设置 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在 iOS 中,SSL pinning 配置通过修改 App Transport Security(ATS)设置和实现运行时证书验证来实现。请按照以下步骤进行: res/raw 设置 ATS 在 Info.plist 中

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

初始化 SSL pinning 在 __CAPGO_KEEP_0__ 中

  • 使用以下 __CAPGO_KEEP_0__ snipped 来在应用初始化时启用 SSL pinning:

    Android 和 iOS 实现的比较 Info.plist 在您的 Android 项目目录中存储所需的证书文件(

    <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);
        }
      }
    }

为 iOS,SSL pinning 配置通过修改 App Transport Security(ATS)设置和实现运行时证书验证。请按照以下步骤进行:

Android 和 iOS 中的 SSL pinning 有什么区别?

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

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

测试和修复

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

MITM 攻击测试

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

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__应用程序中实施和维护SSL固定与Android和iOS的主要区别是什么?

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

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

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

::: faq

如何可以自动化 SSL 证书更新并确保我的 Capacitor 应用程序符合应用商店安全要求?

虽然该文章没有深入探讨自动化 SSL 证书更新或确保遵守应用商店安全指南的工具或策略,但您可以采取步骤来提高应用程序的安全性。一个有效的措施是在 __CAPGO_KEEP_0__ 应用程序中实施 SSL pinning 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 直接将修复推送给用户,而不是等待应用商店批准。用户在后台接收更新,而原生代码仍然在正常审查路径中。

来自马丁的专业支持

立即开始

最新博客

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