我正在与Apache2和Passenger合作进行Rails项目。
我想创建一个用于测试目的的自签名SSL证书。

sudo openssl rsa -des3 -in server.key -out server.key.new


当我输入上述命令时,它说

writing RSA key
Enter PEM pass phrase:


如果我不输入通行证phrse,我收到以下错误消息

unable to write key
3079317228:error:28069065:lib(40):UI_set_result:result too small:ui_lib.c:869:Yo
u must type in 4 to 1024 characters
3079317228:error:0906406D:PEM routines:PEM_def_callback:problems getting passwor
d:pem_lib.c:111:
3079317228:error:0906906F:PEM routines:PEM_ASN1_write_bio:read key:pem_lib.c:382


是否可以生成RSA密钥而不给出pass phrase,因为我不确定/etc/init.d/httpd脚本如何启动HTTP服务器无需人工干预(例如,如果我输入4个字符的密码,它希望我在启动Apache HTTP服务器时提供此密码)。

评论

您的命令行告诉openssl加密现有密钥。听起来好像不是您想要的。

可以将Apache httpd配置为以非交互方式获取私钥密码。请参阅mod_ssl的文档,或者在许多情况下在提供的/打包的配置文件中提供注释。但是,这通常比仅保留私钥不加密更为安全。这更简单。

#1 楼

如果生成的是自签名证书,则可以在一个命令中同时执行密钥和证书,如下所示:

关于省略-des3标志。

评论


这个nodes指令就是为什么我在这里。 (不对私钥进行DES加密)

–jorfus
17年1月24日在23:15

#2 楼

取消-des3标志,这是openssl加密server.key.new的指令(顺便说一句,它根本不是新密钥-它与server.key完全相同,仅更改/删除了密码短语) )。

#3 楼

@Tom H的答案中的openssl req命令正确,可以在server.cert incl中创建自签名证书。 server.key中的无密码RSA私钥:

openssl req -nodes -new -x509 -keyout server.key -out server.cert


这是它的工作原理。在这种情况下,@ MadHatter的答案中忽略-des3不足以创建没有密码短语的私钥。为此,在@MadHatter引用的openssl rsa(“转换私钥”)命令和openssl genrsa(“创建私钥”)命令中就足够了。只是不适合这里的openssl req命令。我们还需要-nodes(“请不要对server.key进行DES加密!”)。

#4 楼

使用-nodes参数,如果指定了此选项,则私钥将不会被加密,例如:

openssl \
    req \
    -nodes \
    -newkey rsa:2048 \
    -keyout www.example.com.key \
    -out www.example.com.csr \
    -subj "/C=DE/ST=NRW/L=Berlin/O=My Inc/OU=DevOps/CN=www.example.com/emailAddress=dev@www.example.com"


#5 楼

只需再次通过openssl运行它

,首先使用密码生成密钥

,然后openssl rsa -in server.key -out server.key

评论


这不适用于ubuntu 16.04

–sweetfa
16年5月9日在20:19

我之所以投票,是因为这个答案不是所要的,而且该命令需要输入并且不会生成密钥。

–唐
16-10-11在13:37

用户已经演示了他们知道如何生成密钥。这个答案建立在这种知识的基础上,我建议采用新生成的密钥,并将其再次通过openssl进行传递,从而实现所要求的目标:生成没有密码短语的密钥。

– darethas
16-10-11在14:19



适用于我,来自GitBash的Windows 10上的openssl。感谢您提供信息。

–绿色
17年5月14日在21:11

很酷,它适用于我的自签名证书

–好运
20年8月13日在12:31

#6 楼

使用下一条命令生成没有加密的无密码私钥文件。最后一个参数是私钥的大小。

openssl genrsa -out my-passless-private.key 4096


评论


这不是没有密码的。它完全是带有密码的。

–dave_thompson_085
18年4月25日在12:48

我正在试验参数的位置。现在可以了。我更改了最后两个参数的位置并测试了命令。

– nix
18-4-25在13:47



现在,它会生成一个未加密的文件。 (仅)位置参数后面的选项将被忽略。查看文件;它没有加密。将4096 -des3替换为4096 -sillywombat,它仍然可以正常工作并产生相同的格式,但仍未加密(当然,密钥值也不同)。无法拥有无密码的加密私钥文件,并且六年前就给出了无密码的未加密文件的正确解决方案。

–dave_thompson_085
18-4-26在12:58



你是对的。 @ dave_thompson_085。最后一个参数对命令没有任何影响。我更新了答案。它不生成任何加密的base64编码,也不生成受密码保护的私钥文件。

– nix
18年4月26日在14:16



#7 楼

将'-nodes'添加到'openssl req',可以从'openssl req'命令生成未加密(无密码)私钥。

评论


这是正确的答案。 -nodes标志的意思是“ No DES”:即,不加密私钥。

–Jabberwock
20年7月25日在18:19