【发布时间】:2014-03-10 14:38:32
【问题描述】:
我正在通过 Internet 查找 PK11_GenerateRandom() 函数的来源,以了解该函数为何会失败。我有一个程序可以完美地使用这个功能,但是当我们迁移到新版本的 Linux 时,它在分叉后失败了 (fork())
由于我不认为 NSS 存在问题,因此我怀疑我们做错了一些事情,这在旧版本的 Linux 中被忽略了,但在新版本中存在问题。
OpenSSL 包在“好”和“坏”服务器上是相同的:
OpenSSL 0.9.8e-fips-rhel5 01 Jul
NSS rpm 不同。 '好'有
nss-3.12.2.0-2.el5
bas 有这个版本
nss-3.15.3-4.el5_10
“好的”服务器使用相当过时的 Linux:
Linux GOOD 2.6.18-128.el5 #1 SMP Wed Jan 21 08:45:05 EST 2009 x86_64 x86_64 x86_64 GNU/Linux
Enterprise Linux Enterprise Linux Server release 5.3 (Carthage)
Red Hat Enterprise Linux Server release 5.3 (Tikanga)
“坏”服务器较新:
Linux BAD 2.6.18-371.4.1.el5 #1 SMP Wed Jan 29 11:05:49 PST 2014 x86_64 x86_64 x86_64 GNU/Linux
Oracle Linux Server release 5.10
Red Hat Enterprise Linux Server release 5.10 (Tikanga)
任何关于我在哪里可以找到来源或失败原因(如来自fork() 的副作用)的线索将不胜感激。
- 格雷格
编辑
这是代码,太简单了,我认为不需要。
/* random points to properly allocated memory, let=32 */
SECStatus rv = PK11_GenerateRandom((unsigned char *)random, (int)len);
if ( rv != SECSuccess )
printf( "PK11_GenerateRandom error = %d\n", PR_GetError()) ;
输出消息当然是:
PK11_GenerateRandom error = -8023
- 格雷格
【问题讨论】:
-
请在输入时显示命令和错误信息
-
@sabbahillel:将代码添加到原始帖子中,但我不相信您会在那里发现任何问题,因为问题不在于调用。相同的代码在数千个站点上运行了多年。正是新的 Linux 风格暴露了我们现在正在研究的一些东西。不过,感谢您的关注。
-
@Grzegorz:当 PK11_GenerateRandom() 似乎是 NSS 函数时,我不明白你为什么提供 OpenSSL 版本。您的问题与您忘记提及的 OpenSSL 之间是否有任何关系?您能否提供您正在使用的 NSS 版本?也许您正在使用 PK11_GenerateRandom 可以使用的任何启用 PKCS#11 的加密硬件(HSM 模块等)?
-
@jariq - 你的问题给了我希望你能提供帮助,因为我正在被添加到项目中,他们告诉我有关 OpenSLL 和 NSS 的信息,好像一切都是相互关联的。如何查看 NSS 版本?我如何知道我们是否使用了启用的加密硬件功能?感谢您的帮助!
-
@jariq - 旧的 nss rpm 是 nss-3.12.2.0-2.el5,新的是 nss-3.15.3-4.el5_10。