我正在尝试从正在运行的服务器生成一个cert.pem。我使用的命令是:

echo "" | openssl s_client -showcerts -prexit -connect 127.0.0.1:4709 2>/dev/null | sed -n echo '/BEGIN\CERTIFICATE/,/END\ CERTIFICATE/p' | tac | sed -n -e '1,/BEGIN/!d;p' | tac > cert.pem

但我收到:
sed:无法读取/BEGIN\CERTIFICATE/,/END\CERTIFICATE/p:没有这样的文件或目录
如果我只使用命令:
openssl s_client -showcerts -prexit -connect 127.0.0.1:4709 2>/dev/null

它使用密钥从服务器返回信息。
有谁能帮我为什么我的命令没有执行?
谢谢!

最佳答案

此命令对我有效(在openbsd上执行):

echo "" | openssl s_client -showcerts -prexit -connect 127.0.0.1:4709 2>/dev/null | sed -n '/BEGIN CERTIFICATE/,/END CERTIFICATE/p' | tac | sed -n -e '1,/BEGIN/!d;p' | tac

如果引号中有刺,则不需要转义空格。
在第一次“sed-n”之后不需要回声
如果有人尝试此命令但没有tac,请使用命令:perl -pe 'print reverse <>'
还要使用正确的主机名和端口。
所以新命令(不带tac)是:
echo "" | openssl s_client -showcerts -prexit -connect 127.0.0.1:4709 2>/dev/null | sed -n '/BEGIN CERTIFICATE/,/END CERTIFICATE/p' | perl -pe 'print reverse <>' | sed -n -e '1,/BEGIN/!d;p' | perl -pe 'print reverse <>'

关于linux - Linux证书生成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46980790/

10-11 23:13
查看更多