由于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。
我不能在Linux上等待LibReSSL,也不能使用刚发布它的OpenBSD并将其作为SSL默认层。
所以我的问题是:是否有人尝试使用NSS或GnuTLS而不是OpenSSL构建OpenSSH,或者修补Dropbear或任何其他解决方案以使SSH服务器使用TPM和EC身份验证?
注意:由于我的资源有限,我不能将OpenSSL与OpenSSH和NSS与Apache一起使用。我绝对需要最小化嵌入式库。
答案 0 :(得分:1)
没有。但是,通过将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
标志的结果。
然后,在strip
上运行sshd
会将其大小减小到大约2MB。
显然,如果您只是要在设备上发送sshd
,那就有意义了。如果你还需要ssh
,它就变得毫无用处。
答案 1 :(得分:1)
我确定了三个解决方案: