当前位置: 首页 > 知识库问答 >
问题:

通过JSCH使用sftp连接时的安全异常

商品
2023-03-14
java.lang.ExceptionInInitializerError
at javax.crypto.Cipher.getInstance(DashoA13*..)
at com.jcraft.jsch.jce.AES256CTR.init(AES256CTR.java:56)
at com.jcraft.jsch.Session.checkCipher(Session.java:2072)
at com.jcraft.jsch.Session.checkCiphers(Session.java:2049)
at com.jcraft.jsch.Session.send_kexinit(Session.java:592)
at com.jcraft.jsch.Session.connect(Session.java:286)
at com.jcraft.jsch.Session.connect(Session.java:162)
at scb.frame.runner.ServerSetup.contactServer(ServerSetup.java:56)

Caused by: java.lang.SecurityException: Cannot set up certs for trusted CAs
at javax.crypto.SunJCE_b.<clinit>(DashoA13*..)
... 34 more
Caused by: java.lang.SecurityException: Cannot locate policy or framework files!
at javax.crypto.SunJCE_b.i(DashoA13*..)
at javax.crypto.SunJCE_b.g(DashoA13*..)
at javax.crypto.SunJCE_b$1.run(DashoA13*..)
at java.security.AccessController.doPrivileged(Native Method)
... 35 more

我要连接的代码:

    String host = serverProperties.getProperty("Host");
    String username = serverProperties.getProperty("Username");
    String password = serverProperties.getProperty("Password");
        JSch jsch = new JSch();
        Security.addProvider(new com.sun.crypto.provider.SunJCE());
        Session session;
        try {
            session = jsch.getSession(username, host, 22);

        session.setPassword(password);

        Properties config = new Properties();
        config.put("StrictHostKeyChecking", "no");
        session.setConfig(config);
        session.connect();
        ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
        sftpChannel.connect();
        sftpChannel.get(sourceFile,destFile);

命令行版本的相同的程序,我可以运行没有任何例外!另一个来自JCraft[link]http://www.jcraft.com/jsch/examples/SFTP.java.html网站的SFTP示例运行良好。

共有1个答案

徐新荣
2023-03-14

这与Java的安全限制有关。默认情况下,限制密钥大小为128位。从您的stacktrace中,我看到您试图使用AES 256位加密。

要解决您的问题,请访问Java的网站并下载Java加密扩展(JCE)无限强度权限策略文件:

http://www.oracle.com/technetwork/java/javase/downloads/index.html

 类似资料:
  • 我使用的是camel version2.13.1和camel-ftp version2.13.1。我正试图通过camel路由连接到sftp服务器。我得到了一些与jCraft Jsch异常相关的错误,如下所示。

  • 我试图连接到无法通过JSch管理的远程设备,尽管我可以使用具有相同凭据的WinSCP客户端进行连接。 该应用程序是一个基于J2EE的企业应用程序,在JBoss作为7.1.1运行,在Windows服务器上,我试图从Quartz作业连接SFTP服务器。下面是我用来验证SFTP登录的代码。 你能帮我找出这种行为的可能原因吗?

  • 问题内容: 我在通过JSch创建到远程SFTP服务器的会话时遇到问题: 我用来通过外壳连接sftp服务器的命令是: 及其正常工作,但是当我尝试使用Java(JSch)时,我遇到了超时异常。Java代码是 我得到的异常是: com.jcraft.jsch.JSchException:超时:未建立套接字 我想它来了,因为我没有在使用shell命令时设置我正在使用的with 选项。如果是这样,那么如何在

  • 在使用ssh2_sftp方法创建了一个通过SFTP发送和接收文件的小型库之后,我发现我必须连接的服务器已经禁用了ssh连接,我只能通过SFTP连接。 服务器连接在使用sftp命令的命令行下运行良好,但是ssh向我发送一个“此服务仅允许sftp连接”。

  • 出于测试目的,我尝试使用Spring-Integration连接到SFTP,并成功地使用了下面提到的相同的代理实现(JumpHostProxyCommand)。 下面是我一直使用的Spring boot+Apache Camel代码: Jsch代理: build.gradle文件: 我已经挣扎了两天来找出错误的根本原因,任何关于这个问题的帮助都是非常感谢的。谢了!

  • 线程“thread-33”org.wso2.carbon.event.input.adaptor.core.Exception.InputEventAdaptoReventProcessingException:无法获取JNDI上下文、JMS连接工厂:poc_jndi_name7或默认目的地:null for JMS CF:StrataTestInputEvent使用:{java.naming.p