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

M1芯片Mac编译Rust到Wasm时OpenSSL编译失败求助

解决Wasm编译时openssl-sys构建失败的问题

核心原因

openssl-sys依赖原生OpenSSL库,但wasm32-unknown-unknown是无操作系统的Wasm目标,原生OpenSSL不支持该平台,因此会出现头文件找不到、目标不兼容的错误——折腾Xcode工具链无法解决本质问题,因为问题不在系统头文件,而在目标平台兼容性。

解决方案:改用纯Rust密码学库

你仅需RSA签名验证功能,完全可以用纯Rust实现的密码学库替代OpenSSL,这类库原生支持Wasm目标,无需依赖系统库。推荐两种方案:

方案1:使用ring(成熟稳定)

ring是Google维护的纯Rust密码学库,支持RSA签名验证,且对Wasm友好。

  1. 修改Cargo.toml,添加依赖:
[dependencies]
ring = "0.16"
untrusted = "0.7"
  1. 示例RSA签名验证代码(适配PKCS#1 v1.5):
use ring::signature;
use untrusted::Input;

fn verify_rsa_signature(public_key_der: &[u8], message: &[u8], signature: &[u8]) -> bool {
    let public_key = match signature::UnparsedPublicKey::new(&signature::RSA_PKCS1_2048_8192_SHA256, Input::from(public_key_der)) {
        Ok(pk) => pk,
        Err(_) => return false,
    };

    public_key.verify(Input::from(message), Input::from(signature)).is_ok()
}

方案2:使用rsa + sha2(轻量模块化)

如果需要更细分的控制,可以用rsa库配合sha2实现签名验证:

  1. 修改Cargo.toml,添加依赖:
[dependencies]
rsa = { version = "0.9", features = ["pkcs1v15", "sha2"] }
sha2 = "0.10"
  1. 示例RSA签名验证代码:
use rsa::pkcs1v15::VerifyingKey;
use rsa::RsaPublicKey;
use sha2::Sha256;
use std::convert::TryInto;

fn verify_rsa_signature(public_key_der: &[u8], message: &[u8], signature: &[u8]) -> bool {
    let public_key = match RsaPublicKey::from_pkcs1_der(public_key_der) {
        Ok(pk) => pk,
        Err(_) => return false,
    };

    let verifying_key = VerifyingKey::<Sha256>::new(public_key);
    verifying_key.verify(message, signature).is_ok()
}

编译验证

替换依赖后,直接执行原编译命令即可:

cargo build --all --target wasm32-unknown-unknown --release

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:24:43