我对 Perl 中的 SSLeay 有一些问题。而且我没有 Perl 的经验可言,所以我需要你的帮助!
我正在尝试与 Apple 推送通知服务 (APNS) 进行交流。这很简单,但我不能使用文件来存储证书和 RSA 私钥。此代码应从数据库运行。
这有效:
Net::SSLeay::CTX_use_RSAPrivateKey_file( $ctx, 'key.pem', &Net::SSLeay::FILETYPE_PEM );
die_if_ssl_error("private key");
Net::SSLeay::CTX_use_certificate_file( $ctx, 'cert.pem', &Net::SSLeay::FILETYPE_PEM );
die_if_ssl_error("certificate");
但正如我之前所说,我不能使用文件。所以我尝试了这个:
$private_key = '----BEGIN RSA PRIVATE [...]';
my $rsa_private = Crypt::OpenSSL::RSA->new_private_key($private_key);
Net::SSLeay::CTX_use_RSAPrivateKey( $ctx, $rsa_private );
die_if_ssl_error("private key");
Net::SSLeay::CTX_use_certificate_file( $ctx, 'cert.pem', &Net::SSLeay::FILETYPE_PEM );
die_if_ssl_error("certificate");
但是现在我在第 7 行遇到分段错误。如果我在第 6 行退出,则不会发生错误。我在这一步做错了什么?
下一步也是从字符串中获取证书。SSLeay 的文档说 CTX_use_certificate 的第二个参数必须是 x509 对象。所以我尝试创建一个:
my $private_key = '----BEGIN RSA PRIVATE [...]';
my $certificate = '----BEGIN CERTIFICATE [...]';
my $rsa_private = Crypt::OpenSSL::RSA->new_private_key($private_key);
Net::SSLeay::CTX_use_RSAPrivateKey( $ctx, $rsa_private );
die_if_ssl_error("private key");
my $x509 = Crypt::OpenSSL::X509->new_from_string($certificate);
Net::SSLeay::CTX_use_certificate( $ctx, $x509 );
die_if_ssl_error("certificate");
但这给了我:
certificate 9530: 1 - error:140BF10C:SSL routines:SSL_SET_CERT:x509 lib
9530: certificate
你有任何提示或想法如何解决这个问题吗?