微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过stdin安全地将密码传递给openssl

我们知道我们可以用openssl使用这个命令encryption一个文件

openssl aes-256-cbc -a -salt -in twitterpost.txt -out foo.enc -pass stdin

密码将从标准input读取。 因此,事先提供密码,我们所需要做的就是预先安排

echo "someGoodPassword" |

到上面的命令。 我的问题是:我怎样才能更安全地做到这一点? 上述方法看起来不够安全。

我会很感激这个,所以我可以更好地理解这个问题。

使用MSVC 2010构buildOpenSSL 1.0.1c时出错

“openssl”不被识别为内部或外部命令

在d2i_RSAPrivateKey_fp()中崩溃

无法在Windows上构buildrustless

OpenSSL的libs:2在Linux libcrypto和libssl上,在Windows上超过13。 我应该在窗口上链接什么来编译我的示例?

zlib和gdi32与OpenSSL?

SVN签出失败,“块分隔符无效”

如何在bash中使用函数

如何使用Flask,Flask-SocketIO和Nginx实现SSL(http to https)

我怎么能让git告诉curl使用openssl而不是gnutls而不重build软件包?

几乎任何你使用的机制都会被root用户窥探,所以记住这一点。

echo选项将显示在' ps '列表中,这使得它对普通用户来说很容易被窃听并找到密码

你可以使用-pass file:filename来使用一个文件,所以你可以使用:

sumask=$(umask) umask 077 rm -f passfile cat >passfile <<EOM someGoodPassword EOM umask $sumask

这将创建该文件,其他帐户无法读取(但仍可由root用户读取)。 一个假定脚本只用来创建密码文件,就好像你重复这个过程一样,它往往是在一个文件中,因此你需要chmod go-rwx这个文件使其他用户无法读取。

那么你使用:

openssl aes-256-cbc -a -salt -in twitterpost.txt -out foo.enc -pass file:passfile

使用预先创建的密码文件来执行加密。

其他机制是-pass env:ENVVAR用于使用一个环境变量(再次把它放在里面而不暴露它就是诀窍)

简洁版本

使用命名管道。

openssl aes-256-cbc -a -salt -in twitterpost.txt -out foo.enc -pass file:<( echo -n "someGoodPassword" )

长版

使用命名管道。 你可以用bash创建它

<( *output* )

例如

<( echo -n "content" ) # without -n echo will add a newline

它将打开一个命名管道,通常是一个先进先出队列,你将在进程列表中看到类似的东西

/dev/fd/63

它只能被当前用户读取,读取后会自动关闭,所以你不必担心权限和清理磁盘(如果程序崩溃,管道将关闭,而由你在另一个答案建议将留在磁盘上)。

这样,它将以最快的方式关闭,只是在命令读完之后,而不用等待它完成任务(我只是做了一个测试:加密一些千兆字节并尝试读取命名管道(它在进程列表中可见):即使openssl花费时间进行加密,命名管道也会立即关闭)。

关于你的意见

如果计算机已被第二个应用程序入侵以获取密码,则用户有一些严重的安全问题需要担心。 实际上,它可能是一些专门用来攻击我自己的软件的软件

如果您的计算机遭到黑客攻击并且攻击者拥有相同的用户权限,那么您已经完成了。 举个例子,攻击者可以很容易地修改你的.bashrc来替代openssl,这样在开始处理所有的事情之前,你就会开始一个假设的“恶意的openssl”来复制你的密码和数据,给你带来虚假的安全感。

这就是说,我不是一个安全专家,所以如果有人想让我陷入遗忘(并告诉我为什么),那么不用客气。

密码放入bash或其他脚本文件中,并为其设置600个权限。 这将只允许您查看该文件密码将不会显示在任何地方。

如果我理解正确的话,你的演唱会

$ echo "someGoodPassword" | openssl (...) -pass stdin

密码将在进程列表中显示给所有用户很短的时间。 这可以很容易地解决与bash的<<<重定向(不会在普通的旧POSIX shell,但是):

$ openssl (...) -pass stdin <<<"someGoodPassword"

这个结构支持变量插值( <<<"$password" ),命令输出可以进一步传送或重定向文件

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐