rust 解决ssl 报错的问题

在使用rust 调用apple push notify servie (apns )的时候, 需要加载apple 提供的.p12的一个证书。这个证书的格式有点老,新的openssl 不再支持,会报错,需要打开“legacy”的能力才能支持

报错信息类似

  digital envelope routines:inner_evp_generic_fetch:unsupported:../crypto/evp/evp_fetch.c:349:Global default library context, Algorithm (RC2-40-CBC : 0), Properties ()

解决办法

安装openssl 

# macOS (Homebrew)
$ brew install openssl@3

# macOS (MacPorts)
$ sudo port install openssl

# macOS (pkgsrc)
$ sudo pkgin install openssl

# Arch Linux
$ sudo pacman -S pkg-config openssl

# Debian and Ubuntu
$ sudo apt-get install pkg-config libssl-dev

# Fedora
$ sudo dnf install pkg-config perl-FindBin openssl-devel

# Alpine Linux
$ apk add pkgconfig openssl-dev

# openSUSE
$ sudo zypper in libopenssl-devel

如果是windows , 则使用 https://slproweb.com/products/Win32OpenSSL.html

安装后需要修改配置文件

$ openssl version -d
OPENSSLDIR: “/usr/lib/ssl”

找到安装的位置,然后编辑配置文件openssl.cnf

# List of providers to load

# 一定要在对应的位置修改和添加

[openssl_init]
providers = provider_sect


# 一定要在对应的位置修改和添加
[provider_sect]
default = default_sect 
legacy = legacy_sect
# 一定要在对应的位置修改和添加

[default_sect]
activate = 1

[legacy_sect]
activate = 1

然后查看一下

$ openssl list -providers
Providers:
  default
    name: OpenSSL Default Provider
    version: 3.0.7
    status: active
  legacy
    name: OpenSSL Legacy Provider
    version: 3.0.7
    status: active

如果 出现了legacy,说明正确了。

参考

https://docs.rs/openssl/latest/openssl/index.html

https://www.practicalnetworking.net/practical-tls/openssl-3-and-legacy-providers/

 

posted on 2024-04-12 15:01  cococooder  阅读(237)  评论(0编辑  收藏  举报