- 论坛徽章:
- 0
|
让我们先来看一下pem.h头文件中的定义:
#define PEM_read_RSAPrivateKey(fp,x,cb,u) (RSA *)PEM_ASN1_read( \
(char *(*)())d2i_RSAPrivateKey,PEM_STRING_RSA,fp,(char **)x,cb,u)
#define PEM_read_RSAPublicKey(fp,x,cb,u) (RSA *)PEM_ASN1_read( \
(char *(*)())d2i_RSAPublicKey,PEM_STRING_RSA_PUBLIC,fp,(char **)x,cb,u)
#define PEM_read_bio_RSAPrivateKey(bp,x,cb,u) (RSA *)PEM_ASN1_read_bio( \
(char *(*)())d2i_RSAPrivateKey,PEM_STRING_RSA,bp,(char **)x,cb,u)
#define PEM_read_bio_RSAPublicKey(bp,x,cb,u) (RSA *)PEM_ASN1_read_bio( \
(char *(*)())d2i_RSAPublicKey,PEM_STRING_RSA_PUBLIC,bp,(char **)x,cb,u)
对应的很工整是不是,你生成一个私钥,然后用它生成一个公钥。
openssl genrsa -out private.pem 1024
openssl rsa -in priv.pem -pubout -out public.pem
用任何一种方法打开私钥,读取私钥信息,得到RSA,查看RSA,ok,没有问题,一切都还看起来比较正常。
然后用任何一种方法打开公钥,读取公钥信息,问题出现了:RSA对象为空,你失败了。
通过openssl的手册和帮助,你会发现两个函数:
PEM_read_bio_RSA_PUBKEY()
PEM_read_RSA_PUBKEY()
他们才是你要找的对应的,而上面两个函数是从任何.h里面找不到的,但是他们的确是真实存在的符号连接,在对应的.o文件中用objdump可以查看到他们的符号,很诡异!
现象描述完了,还未探其究竟。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/1574/showart_2035483.html |
|