You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为Ionic应用生成自签名证书,解决本地HTTPS服务器SSL握手错误

解决Ionic应用访问本地HTTPS服务器的SSL握手错误

你的推测完全正确——这个SSL握手错误就是因为本地服务器的证书不被Ionic应用的网络客户端信任,而开发环境下使用自签名证书是完全合适的解决方案。下面我会一步步带你搞定这个问题:

1. 确保本地服务器使用自签名证书(如果还没配置)

如果你的服务器还没有自签名证书,可以用openssl快速生成:

# 生成有效期1年的自签名证书和私钥
openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt -days 365 -nodes

生成后,把server.crt和server.key配置到你的本地服务器(比如Nginx、Apache),确保服务器启用HTTPS并使用这两个文件。

2. 让Ionic应用信任该自签名证书

不同平台的配置方式略有不同,我分别说明:

Web平台(浏览器中运行)

在Chrome或Firefox中访问你的服务器地址时,浏览器提示"不安全",直接手动添加安全例外即可——Ionic在浏览器环境下的HTTP请求和普通网页请求行为一致,添加例外后就能正常访问。

Android平台

推荐使用cordova-plugin-advanced-http插件来处理自定义证书信任,它比原生HttpClient更易配置:

  1. 先安装插件:
    ionic cordova plugin add cordova-plugin-advanced-http
    npm install @awesome-cordova-plugins/http
    
  2. 将server.crt文件放入你的Ionic项目的resources/android/raw目录(没有的话手动创建)。
  3. 在代码中配置证书信任:
    import { HTTP } from '@awesome-cordova-plugins/http/ngx';
    import { Component } from '@angular/core';
    
    @Component({
      selector: 'app-home',
      templateUrl: 'home.page.html',
      styleUrls: ['home.page.scss'],
    })
    export class HomePage {
      constructor(private http: HTTP) {}
    
      async sendRequest() {
        try {
          // 设置证书固定模式
          await this.http.setServerTrustMode('pinned');
          // 添加我们的自签名证书
          await this.http.addSSLCertAsset('server.crt');
          // 发送请求
          const response = await this.http.get('https://example.example.com/somedir/dev_1.4/pages/login.php', {}, {});
          console.log('请求成功:', response.data);
        } catch (error) {
          console.error('请求失败:', error);
        }
      }
    }
    

iOS平台

  1. 将server.crt文件添加到Xcode项目中,确保在"Build Phases" → "Copy Bundle Resources"里能看到这个文件。
  2. 修改Info.plist,添加App Transport Security设置(开发环境下允许该域名的不安全请求):
    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSExceptionDomains</key>
      <dict>
        <key>example.example.com</key>
        <dict>
          <key>NSExceptionAllowsInsecureHTTPLoads</key>
          <true/>
          <key>NSIncludesSubdomains</key>
          <true/>
        </dict>
      </dict>
    </dict>
    
  3. 同样可以使用cordova-plugin-advanced-http来固定证书,代码和Android平台一致。

3. 验证配置

运行你的Ionic应用(比如ionic cordova run android或ionic cordova run ios),测试HTTP请求——应该不会再出现SSLHandshakeException了。

⚠️ 注意:自签名证书只适合开发环境,生产环境必须使用受公共CA信任的证书(比如Let's Encrypt的免费证书),否则用户的设备会拒绝连接。

内容的提问来源于stack exchange,提问作者J.Do

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 16:57:40