OpenSSL错误error:0308010C:数字信封例程::unsupported



我尝试在Windows上使用curl来发布时间戳请求。需要身份验证,所以我使用p12文件。我得到错误信息,但p12文件的密码是正确的。

命令:

curl --insecure --cert-type P12 --cert my.p12:mypassword -X POST -d @mytest.req <myTSURL>

错误信息:

curl:(58)无法解析PKCS12文件,检查密码,OpenSSL错误错误:0308010C:数字信封例程::不支持

curl - v

curl 7.83.1 (x86_64-pc-win32) libcurl/7.83.1 OpenSSL/3.0.2 (Schannel) zlib/1.2.12 brotli/1.0.9 libidn2/2.3.2 libssh2/1.10.0 nghttp2/1.47.0 ngtcp2/0.5.0 nghttp3/0.4.1 libgsasl/1.10.0
Release-Date: 2022-05-11
Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli gsasl HSTS HTTP2 HTTP3 HTTPS-proxy IDN IPv6 Kerberos Largefile libz MultiSSL NTLM SPNEGO SSL SSPI TLS-SRP UnixSocket

Meta:这不是真正的编程或开发,可能在超级用户或安全上更好。但随着OpenSSL 3.0的普及,这个问题可能会变得越来越普遍,我想把答案拿出来。

3.0 OpenSSL。x(及以上)默认不支持旧的/不安全的算法,但直到最近,大多数创建PKCS12的软件(包括OpenSSL 1.x.x)都为证书包使用了这样的算法,即PKCS12定义的使用40位RC2的PBE,通常缩写为RC2-40——有些仍然至少有时会这样做,比如默认的Windows 10证书导出对话框。执行(fixed)

检查。
openssl pkcs12 -in my.p12 -info -nokeys -nocerts 
# in 3.x.x add -provider legacy -provider default or just -legacy
# to avoid prompt use -password or -passin, see man pages

,我希望输出将包括

PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048

查看curl是否有指定OpenSSL 3.0的选项。X提供程序,如果是这样,则指定(固定)'legacy'和'default'。否则,将pkcs12转换为(fixed TWICE)

# in 3.x.x
openssl pkcs12 -in old -nodes -provider legacy -provider default >temp && <temp openssl pkcs12 -export -out new
# or simpler
openssl pkcs12 -in old -nodes -legacy >temp && <temp openssl pkcs12 -export -out new
# in 1.x.x
openssl pkcs12 -in old -nodes >temp && <temp openssl pkcs12 -export -descert -out new 
# and in either case securely delete temp; on systems with a memory tmpfs, 
# typically /tmp, putting the file there can help assure this
# IFF 'old' was created by software that put the keybag before the certbag,
# which you can infer from the order displayed by pkcs12 -info,
# you can skip the temp file and pipe directly from one openssl to the other

转换将丢失现有文件中设置的任何'friendlyname'。对于curl,可能还有大多数其他程序,这并不重要,但是如果您想将同一个文件与friendlyname无关,请在-export部分添加-name $name

我使用OpenVPN得到同样的错误。我可以通过在/etc/ssl/openssl.cnf配置文件中添加或取消注释来修复它:

openssl_conf = openssl_init

[openssl_init]
providers = provider_sect

[provider_sect]
default = default_sect
legacy = legacy_sect

[default_sect]
activate = 1

[legacy_sect]
activate = 1

这是基于OpenSSL WIKI上的信息

相关内容

  • 没有找到相关文章

最新更新