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

Tauri应用忽略HTTPS SSL证书请求的可行方案问询

解决方案:Tauri中忽略HTTPS证书验证并避免卡顿

方案1:配置Tauri官方HTTP模块忽略证书验证

你之前使用Tauri HTTP模块时未配置证书忽略选项,导致TLS错误。Tauri的getClient支持传入ClientOptions来禁用证书校验:

import { getClient, ClientOptions } from '@tauri-apps/api/http';

// 配置忽略无效证书和主机名(IP地址请求时可能需要后者)
const clientOptions: ClientOptions = {
  danger_accept_invalid_certs: true,
  danger_accept_invalid_hostnames: true
};

const client = await getClient(clientOptions);
try {
  const response = await client.delete('https://192.168.100.100/');
  console.log(response);
} catch (err) {
  console.error(err);
}

该方案基于Tauri官方API,无第三方依赖,兼容性和性能更有保障。

方案2:修复Axios+Tauri适配器的证书忽略配置

axios-tauri-adapter默认使用无配置的Tauri HTTP客户端,需手动传入带证书忽略设置的客户端:

import axios from 'axios';
import axiosTauriAdapter from 'axios-tauri-adapter';
import { getClient, ClientOptions } from '@tauri-apps/api/http';

async function initAxiosClient() {
  const clientOptions: ClientOptions = {
    danger_accept_invalid_certs: true,
    danger_accept_invalid_hostnames: true
  };
  const tauriClient = await getClient(clientOptions);
  
  return axios.create({
    adapter: axiosTauriAdapter(tauriClient) // 传入配置好的Tauri客户端
  });
}

// 初始化Axios客户端
let axiosClient;
initAxiosClient().then(client => {
  axiosClient = client;
});

document.getElementById("get-ata").addEventListener("click", async () => {
  try {
    const response = await axiosClient.get("https://192.168.100.100/");
    console.log(response);
  } catch (error) {
    console.log("Error: ", error);
  }
});

通过此配置,Axios会使用带证书忽略规则的Tauri客户端发起请求,解决证书校验失败问题。

方案3:将Rust同步命令改为异步(低改动成本)

你现有的Rust命令是同步执行的,导致UI卡顿。只需小幅修改为异步命令,使用reqwest的异步客户端即可:

use tauri::async_runtime;
use reqwest::{Client, Error, Response};
use std::time::Duration;

// 标记为异步命令
#[tauri::command(async)]
async fn api_post_req(url: &str, auth: &str, body: String, timeout: f32) -> String { 
  // 构建异步客户端
  let client = Client::builder()
    .danger_accept_invalid_certs(true)
    .build()
    .unwrap();

  let time: Duration = Duration::from_secs_f32(timeout);

  let result = client
    .post(url)
    .header("authorization", auth)
    .body(body)
    .timeout(time)
    .send()
    .await; // 异步等待请求完成

  convert_response(result).await
}

// 异步转换响应结果
async fn convert_response(result: Result<Response, Error>) -> String {
  match result {
    Ok(response) => {
      match response.text().await { // 异步读取响应文本
        Ok(text) => text,
        Err(err) => format!("Something messed up! but result was ok. Rust error: {}", err)
      }
    },
    Err(error) => format!("Rust error: {}", error)
  }
}

核心改动点:

  1. 命令宏改为#[tauri::command(async)]
  2. 请求发送和响应读取添加.await标记异步执行
  3. 转换函数改为异步函数

修改后命令会在后台线程执行,不会阻塞UI,彻底解决卡顿问题。

未来扩展:支持自定义证书

当需要信任自定义证书时,只需调整客户端配置:

  • Tauri HTTP模块:在ClientOptions的ca_certificates字段传入证书内容
  • Rust reqwest客户端:使用Client::builder().add_root_certificate()添加证书

内容的提问来源于stack exchange,提问作者kijada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:25:30