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友好。
- 修改
Cargo.toml,添加依赖:
[dependencies] ring = "0.16" untrusted = "0.7"
- 示例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实现签名验证:
- 修改
Cargo.toml,添加依赖:
[dependencies] rsa = { version = "0.9", features = ["pkcs1v15", "sha2"] } sha2 = "0.10"
- 示例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
相关产品推荐
相关产品推荐

