openssl中-nodes参数的目的是什么?

时间:2011-02-19 15:30:04

标签: openssl

openssl中-nodes参数的用途是什么?

2 个答案:

答案 0 :(得分:105)

选项-nodes不是英文单词“nodes”,而是“no DES”。当作为参数给出时,这意味着OpenSSL不会加密PKCS#12文件中的私钥。

要加密私钥,您可以省略-nodes,并且您的密钥将使用3DES-CBC加密。要加密密钥,OpenSSL会提示您输入密码,并使用该密码使用密钥派生函数EVP_BytesToKey生成加密密钥。

根据您的OpenSSL版本和已编译选项,您可能能够提供这些选项来代替-nodes

-des          encrypt private keys with DES
-des3         encrypt private keys with triple DES (default)
-idea         encrypt private keys with idea
-seed         encrypt private keys with seed
-aes128, -aes192, -aes256
              encrypt PEM output with cbc aes
-camellia128, -camellia192, -camellia256
              encrypt PEM output with cbc camellia

最终,在库级别,OpenSSL使用您选择的加密算法(或缺少加密算法)调用函数PEM_write_bio_PrivateKey

答案 1 :(得分:11)

编辑:nginx v1.7.3添加了一个ssl_password_file指令,该指令从指定文件中读取密码,尝试上下文中的每个密码 encrypted-private.key

indiv是正确的,-nodes参数意味着OpenSSL将创建UNencrypted private.key ;否则,将出现密码短语提示,以创建 encrypted-private.key 。见reqpkcs12CA.pl

然而,我觉得目的(对于程序员来说)是因为:

  • HTTP服务器(例如ApacheNginx)无法读取 encrypted-private.key 而无需密码短语→
    • 选项A - 每次HTTP服务器启动时,必须为 encrypted-private.key 提供密码
    • 选项B - 在ssl_password_file file.keys;http { }上下文中指定server { }。 [ref]
    • 选项C - 使用-nodes创建 private.key 而不加密

有用:锁定 private.key

  • {将HTTP服务器添加到 ssl-cert 组}
  • sudo chown root:ssl-cert private.key - ch ange 拥有 private.key root 用户,< em> ssl-cert 组
  • sudo chmod 640 private.key - 将 private.key 的访问权限更改为所有者R / W,R组
  • 现在,HTTP服务器应该能够启动并读取未加密的 private.key

选项A

更强的安全性,但是当服务器重新启动时,必须 encrypted-private.key 手动键入密码

选项B

中等安全性,可能是A / C之间的良好平衡

选项C

安全性较弱,但未提示加密 private.key 密码短语