【问题标题】:How to set up server authentication in Apache MINA sshd?如何在 Apache MINA sshd 中设置服务器身份验证?
【发布时间】:2017-02-09 01:14:49
【问题描述】:

我已经使用 Apache MINA sshd 为 SFTP 设置了一个 ssh 服务器。我想启用服务器身份验证,这样客户端就不会被欺骗。在文档页面中,它所说的只是使用以下方法(Apache MINA sshd doc):

sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider("hostkey.ser"));

但据我了解,它会自行生成一个密钥对。如果我想为此服务器使用现有的证书文件怎么办?

【问题讨论】:

    标签: java sshd mina


    【解决方案1】:

    好的,我找到了。我使用了 MappedKeyPairProvider 类:

    sshd.setKeyPairProvider(new MappedKeyPairProvider(loadKeyPair("certificateFile.p12")));
    

    loadKeyPair 定义如下:

    public static loadKeyPair(String path) throws KeyStoreException, CertificateException, NoSuchAlgorithmException, IOException, UnrecoverableKeyException, NoSuchProviderException {
        KeyStore p12 = KeyStore.getInstance("pkcs12");
        p12.load(new FileInputStream(path), "certPassword".toCharArray());
        java.security.cert.Certificate cert = p12.getCertificate("myAlias");
        PublicKey publicKey = cert.getPublicKey();
        PrivateKey key = (PrivateKey)p12.getKey("myAlias", "certPassword".toCharArray());
        return new KeyPair(publicKey, key);
    }
    

    请注意,我的证书是以 PKCS12 格式存储的。

    【讨论】:

    • 如果运行 bin\sshd.bat,您是否找到了配置身份验证的方法?
    • 不,抱歉。我都是以编程方式完成的。
    • 谢谢!对于偶然发现此问题的任何人:集成身份验证固定为“Objects.equals(用户名,密码)”,因此您可以登录例如作为“根”,“根”。
    【解决方案2】:

    FileKeyPairProvider 更简单

    Path path = Paths.get(getClass().getClassLoader().getResource("server-key.pem").toURI());
    sshd.setKeyPairProvider(new FileKeyPairProvider(path));
    

    【讨论】:

    • 如果你打包你的应用程序,这还能用吗?我觉得FileKeyPayProvider 需要一个物理文件,这只会在开发过程中起作用,因为在资源上调用.toURI 仍然能够生成file:// URI。
    • 找到ClassLoadableResourceKeyPairProvider
    猜你喜欢
    • 2016-04-11
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    相关资源
    最近更新 更多