OpenSSL - 经常问到的问题
--------------------------------------
* 目前的 OpenSSL 的版本是什么?
* 文档在哪里?
* 我怎样和 OpenSSL 的开发人员联系?
* 要使用 OpenSSL 我需要申请专利许可证吗?
* OpenSSL 线程安全吗?
* 为什么我收到 "PRNG not seeded" 这样的错误信息?
* 为什么链接器抱怨说有未定义的符号?
* 我在哪里能得到编译好了的 OpenSSL 版本?
* 我在 Windows 下编译了一个程序,可它崩溃了:为什么?
* 怎样使用ASN1的函数读写DER编码的缓冲区?
* 我想使用 这样的宏,但却给我一个错误,为什么?
* 我调用了 <某个函数> 但是却失败了,为什么?
* 我的错误输出只是一大堆数字,它们是什么意思?
* 为什么我收到什么未知算法的错误信息?
* 怎么创建证书或者认证请求?
* 我为什么不能创建认证请求?
* 为什么 会因为证书认证错误而失败?
* 为什么我与使用OpenSSL的服务器联接的时候总是只能使用弱加密?
* 我怎样才能创建DSA证书?
* 为什么我不能和一台使用DSA证书的服务器建立SSL联接?
* 我怎么才能删除一个私钥上的口令保护?
* 为什么OpenSSH 的 configure 脚本不能检测到 OpenSSL?
* 为什么 OpenSSL 测试带着 "bc: command not found" 信息失败?
* 为什么 OpenSSL 测试带着 "bc: 1 no implemented信息失败?
* 为什么 OpenSSL 在 Alpha True64 Unix 上编译失败?
* 为什么 OpenSSL 带着"ar: command not found" 这样的错误信息编译失败?
* 目前的 OpenSSL 的版本是什么?
目前的版本可以从获得.OpenSSL 0.9.6 在
2000 年 9 月 24 日发布.
除了当前的稳定版本以外,你还可以获取 OpenSSL 的每日开发快照,在
,或者你也可以通过匿名 CVS 访问
获取.
* 文档在哪里?
OpenSSL 是一个库,它为类似安全 web 服务器这样的应用提供加密功能.
请仔细阅读你想用的应用的文档.INSTALL 文件解释了如何安装这个库的问题.
OpenSSL 包含一个可以用于执行加密功能的命令行工具.在 openssl(1) 手册页
里有描述.给开发人员使用的文档正在写.有几个手册页已经可以用了;libcrypto
和 libssl 库的概述在 crypto(3) 和 ssl(3)的手册页里描述.
OpenSSL 手册页安装在 /usr/local/ssl/man (或者你象 INSTALL 里描述的那样声明
的另外一个目录).另外,你可以在阅读大多数
当前版本的文档.
有关 libcrypto 里面的部件的更多内容,你可以阅读 Ariel Glenn 的关于 SSLeay 0.9
的文档,它是 OpenSSL 的前身,它的文档在
那些文档中有许多仍然适用于 OpenSSL.
在 doc/openssl.txt 里有一些关于证书扩展和 PKCS#12 的文档.
最早的 SSLeay 的文档放在 OpenSSL 的 doc/ssleay.txt 里.如果其他的资源都
不能帮助你的话,那么它也许有用,不过你一定要知道它反映的是过时的 SSLeay
0.6.6 的版本.
* 我怎样和 OpenSSL 的开发人员联系?
README 文件描述了如何向 OpenSSL 提交臭虫报告和补丁.OpenSSL 邮件列表
的信息可以在 获得.
* 要使用 OpenSSL 我需要申请专利许可证吗?
README 文件的专利(patent)段列出了你使用OpenSSL时可能要遵循的专利.
请咨询一位律师获取关于版权的信息.OpenSSL 开发组不提供法律建议.
你可以配置你的 OpenSSL 不使用 RC5 和 IDEA.用下面的命令:
./config no-rc5 no-idea
* OpenSSL 线程安全吗?
是(有一个局限:一次 SSL 联接不能使用多线程进行并发).在 Windows 和许多
Unix 系统上,OpenSSL 自动使用标准库的多线程版本.如果你的平台不是这些平台
之一,请参考 INSTALL 文件.
多线程应用必须给 OpenSSL 提供两个回调函数.这些都在 thread(3) 手册页里描述.
* 为什么我收到 "PRNG not seeded" 这样的错误信息?
加密软件需要一个非周期的数据源才能正确运转.
许多开放源码的操作系统提供一个"随机设备"为这个用途服务.而在其他系统上,
应用在生成密钥或者执行公钥加密之前必须用合适的数据调用 RAND_add()或
RAND_seed()函数.
有些有缺陷的应用不做这件事.到版本 0.9.5,OpenSSL 里面的需要随机数
的函数如果在随机数发生器没有收到一个128位的随机值就会报一个错误.
如果出现这个错误,请与你使用的应用的作者联系.很可能是他/她就没有正确
使用这些东西.OpenSSL 0.9.5 和以后的版本会拒绝执行那些有潜在的不安全加密
的动作,以此把错误显示出来.
在没有 /dev/urandom 的系统上,使用熵收集守护(Entropy Gathering Demon)
也是一个好计策);参阅 RAND_egd() 的手册页获取细节.
大多数 openssl 的命令行工具会试图使用文件 $HOME/.rnd (或者 $RANDFILE,
--如果设置了这个环境变量)用做产生 PRNG 种子.如果这个文件不存在或者太短,
就有可能出现那个 "PRNG not seeded" 错误信息.
[ OpenSSL 0.9.5 的用户注意了:版本0.9.5的命令"openssl rsa"
并不做这件事,并且在那些没有 /dev/urandom 的系统上用口令加密一个
RSA密钥时会失效!这是一个库里面的臭虫;请使用更高版本的软件.]
对于 Solaris 2.6 而言,Tim Nibbe 和另外一些人建议
安装 SUNski 包.该包来自 Sun 补丁 105710-01 (Sparc),它会增加一个
/dev/random 设备并确保其投入使用,通常是通过 $RANDFILE.其他 Solaris
版本也可能有类似补丁.不过,我们必须警告你 /dev/random 通常是一个块设备,
这一点可能对 OpenSSL 有些影响.
* 为什么链接器抱怨说有未定义的符号?
可能是因为编译中断了,而且 make 没有认识到还缺少某些东西.运行
"make clean; make".
如果你用的是 ./Configure 而不是 ./config,请确信你选用了正确的目标机器.
在不同的 OS 版本之间的文件格式可能有些许区别(比如 sparcv8/sparcv9,
或者 a.out/elf).
如果你看到的错误信息包含下面的符号,请使用 "no-asm" 配置选项,
就象 INSTALL 里描述的那样:
BF_cbc_encrypt, BF_decrypt, BF_encrypt, CAST_cbc_encrypt,
CAST_decrypt, CAST_encrypt, RC4, RC5_32_cbc_encrypt, RC5_32_decrypt,
RC5_32_encrypt, bn_add_words, bn_div_words, bn_mul_add_words,
bn_mul_comba4, bn_mul_comba8, bn_mul_words, bn_sqr_comba4,
bn_sqr_comba8, bn_sqr_words, bn_sub_words, des_decrypt3,
des_ede3_cbc_encrypt, des_encrypt, des_encrypt2, des_encrypt3,
des_ncbc_encrypt, md5_block_asm_host_order, sha1_block_asm_data_order
如果这些东西都不能帮你解决问题,那你可以试试当前的快照(源程序).
如果问题依旧,请提交一个错误报告.
* 我在哪里能得到编译好了的 OpenSSL 版本?
有些使用 OpenSSL 的应用是以二进制的形式发布的.当使用这样的应用时,
你不需要自己安装 OpenSSL;该应用会包含所需要的部分(比如,DLL)
如果你想在 Windows 系统上安装 OpenSSL,但是你没有 C 编译器,请阅读
INSTALL.W32 里的 "mingw32" 节,获取如何获取和安装自由的 GNU C 编译器的信息.
许多 Linux 和 *BSD 发布版带有 OpenSSL.
* 我在 Windows 下编译了一个程序,可它崩溃了:为什么?
通常是因为你忽略了 INSTALL.W32 里的注解.你必须和多线程版本的 VC++ 运行时间
DLL 库链接,否则冲突会导致程序崩溃:通常是在第一次 BIO 相关的读写操作的时候.
* 怎样使用ASN1的函数读写DER编码的缓冲区?
你有两个选择.一个是用一个内存BIO和 i2d_XXX_bio()或 d2i_XX_bio()一起使用,
另一个是你可以直接使用 i2d_XXX(),d2i_XXX() 函数.
因为这个问题是最常见的导致痛苦的问题,所以我们在这里包含了一个使用PKCS7
的代码片段做例子:(靠,我花了整整一周读程序才找到方法,眼前一黑...)
unsigned char *buf, *p;
int len;
len = i2d_PKCS7(p7, NULL);
buf = OPENSSL_malloc(len); /* or Malloc, error checking omitted */
p = buf;
i2d_PKCS7(p7, &p);通告:http://www.qqread.com/net-saft/b197048.html进入讨论组讨论。
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- 加固Wi-Fi无线网络安全的17招式 (11次浏览)
- 网管秘籍 审核网络安全的十大必备工具 (6次浏览)
- 个人用户的网络安全防范 (0次浏览)
- 驱逐威胁 六把安全利剑清除僵尸网络 (0次浏览)
- CISSP的成长之路(十九):详述安全威胁控制手 (0次浏览)
- 07年电脑安全大盘点:蠕虫网络威胁Web 2.0 (0次浏览)
- Web应用安全的全新探索 (0次浏览)
- 到底谁需要网络访问控制 (NAC)? (0次浏览)
- 针对性的防御手段 十招应对邮件欺诈 (0次浏览)
- 跨站打印攻击 网络打印机成攻击新途径 (0次浏览)



