由于 OpenSSL 的安全问题,我想改用 NSS 或 GnuTLS。对于 Apache 服务器的需求,这很容易,因为每个服务器都有一个模块。但对于 SSH,这看起来即使不是不可能,也是很困难。
Dropbear嵌入了自己的算法,不对外开放。 OpenSSH 习惯于使用 OpenSSL 构建,但几个月以来,it is possible to build it without it感谢新选项:
make OPENSSL=no
但是随后使用了 D. J. Bernstein 作品中的软件加密算法。这很好,但不适合我,因为我将使用 TPM,因此可以访问 pkcs11 层。因此,正确的解决方案是使用 NSS 或 GnuTLS 构建 OpenSSH。
我等不及LibReSSL在 Linux 上,也不要使用刚刚发布的 OpenBSD,并将其设为 SSL 默认层。
所以我的问题是:是否有人尝试并设法使用 NSS 或 GnuTLS 而不是 OpenSSL 构建 OpenSSH,或者修补了 Dropbear 或任何其他解决方案以使 SSH 服务器与 TPM 和 EC 身份验证一起工作?
注意:由于我的资源有限,我无法将 OpenSSL 与 OpenSSH 结合使用,以及将 NSS 与 Apache 结合使用。我绝对需要最小化嵌入式库。
最佳答案
没有。但是,您可以通过将 libcrypto(OpenSSH 实际使用的 OpenSSL 的一部分)静态链接到 sshd
来减少与 OpenSSL 相关的磁盘使用量的增加。
在我的系统上,我可以通过在 make sshd
之后手动运行以下命令来做到这一点:
gcc -o sshd sshd.o auth-rhosts.o auth-passwd.o auth-rsa.o auth-rh-rsa.o audit.o \
audit-bsm.o audit-linux.o platform.o sshpty.o sshlogin.o servconf.o serverloop.o \
auth.o auth1.o auth2.o auth-options.o session.o auth-chall.o auth2-chall.o \
groupaccess.o auth-skey.o auth-bsdauth.o auth2-hostbased.o auth2-kbdint.o \
auth2-none.o auth2-passwd.o auth2-pubkey.o monitor_mm.o monitor.o monitor_wrap.o \
kexdhs.o kexgexs.o kexecdhs.o kexc25519s.o auth-krb5.o auth2-gss.o gss-serv.o \
gss-serv-krb5.o loginrec.o auth-pam.o auth-shadow.o auth-sia.o md5crypt.o \
sftp-server.o sftp-common.o roaming_common.o roaming_serv.o sandbox-null.o \
sandbox-rlimit.o sandbox-systrace.o sandbox-darwin.o sandbox-seccomp-filter.o \
sandbox-capsicum.o -L. -Lopenbsd-compat/ -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack \
-fstack-protector-strong -lssh -lopenbsd-compat \
/usr/lib/x86_64-linux-gnu/libcrypto.a -ldl -lutil -lz -lnsl -lcrypt -lresolv
(这是将 -lcrypto
替换为 libcrypto.a
的完整路径并从链接器命令中删除 -pie
标志的结果由 make
生成)。
然后,在 sshd
上运行 strip
将其大小减少到大约 2MB。
如果您只想在设备上发送 sshd
,显然这是有意义的。如果你还需要 ssh
,它就变得毫无用处。
关于openssl - 如何使用 NSS 或 GnuTLS 而不是 OpenSSL 构建 openSSH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26400471/