密码“aes256-cbc”是必需的,但它不可用

Posted

技术标签:

【中文标题】密码“aes256-cbc”是必需的,但它不可用【英文标题】:The cipher 'aes256-cbc' is required, but it is not available 【发布时间】:2013-08-02 03:06:51 【问题描述】:

我正在尝试使用 JSch 进行 SFTP,但遇到了一些错误:

com.jcraft.jsch.JSchException:。

下面是我使用的代码。我错过了什么吗?

JSch jsch = new JSch();
Session session = null;

jsch.addIdentity("C:\\privatekey.ppk", "Password");

session = jsch.getSession("user", "54.251.240.234", 22);
session.setConfig("StrictHostKeyChecking", "no");


Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp) channel;
sftpChannel.put("C:\\Users\\test.txt", "/home/user/test.txt");
sftpChannel.exit();
session.disconnect();

堆栈跟踪

[8/30/13 1:56:26:556 SGT] 00000021 SystemErr     R com.jcraft.jsch.JSchException: The cipher 'aes256-cbc' is required, but it is not available.
[8/30/13 1:56:26:557 SGT] 00000021 SystemErr     R  at com.jcraft.jsch.KeyPair.loadPPK(KeyPair.java:1017)
[8/30/13 1:56:26:557 SGT] 00000021 SystemErr     R  at com.jcraft.jsch.KeyPair.load(KeyPair.java:590)
[8/30/13 1:56:26:557 SGT] 00000021 SystemErr     R  at com.jcraft.jsch.KeyPair.load(KeyPair.java:542)
[8/30/13 1:56:26:557 SGT] 00000021 SystemErr     R  at com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:40)
[8/30/13 1:56:26:558 SGT] 00000021 SystemErr     R  at com.jcraft.jsch.JSch.addIdentity(JSch.java:389)
[8/30/13 1:56:26:558 SGT] 00000021 SystemErr     R  at com.jcraft.jsch.JSch.addIdentity(JSch.java:370)
[8/30/13 1:56:26:558 SGT] 00000021 SystemErr     R  at com.belsize.sb.SB_UtilityBean.runExternalProgram_Windows(SB_UtilityBean.java:1134)
[8/30/13 1:56:26:558 SGT] 00000021 SystemErr     R  at com.belsize.sb.EJSLocal0SLSB_Utility_861cc9f0.runExternalProgram_Windows(EJSLocal0SLSB_Utility_861cc9f0.java)
[8/30/13 1:56:26:558 SGT] 00000021 SystemErr     R  at com.belsize.sb.SB_IntegrationBean.getFTP_Status(SB_IntegrationBean.java:2175)
[8/30/13 1:56:26:559 SGT] 00000021 SystemErr     R  at com.belsize.sb.EJSLocal0SLSB_Integration_13682180.getFTP_Status(EJSLocal0SLSB_Integration_13682180.java)
[8/30/13 1:56:26:559 SGT] 00000021 SystemErr     R  at pagecode.module.user_permission.W_useraccount.getFTP_Status(W_useraccount.java:992)
[8/30/13 1:56:26:559 SGT] 00000021 SystemErr     R  at pagecode.module.user_permission.Up1006.doUp1006_commandlink_testftpAction(Up1006.java:711)
[8/30/13 1:56:26:559 SGT] 00000021 SystemErr     R  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[8/30/13 1:56:26:560 SGT] 00000021 SystemErr     R  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
[8/30/13 1:56:26:560 SGT] 00000021 SystemErr     R  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
[8/30/13 1:56:26:560 SGT] 00000021 SystemErr     R  at java.lang.reflect.Method.invoke(Method.java:611)
[8/30/13 1:56:26:560 SGT] 00000021 SystemErr     R  at org.apache.el.parser.AstValue.invoke(AstValue.java:268)
[8/30/13 1:56:26:560 SGT] 00000021 SystemErr     R  at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
[8/30/13 1:56:26:561 SGT] 00000021 SystemErr     R  at org.apache.myfaces.view.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:83)
[8/30/13 1:56:26:561 SGT] 00000021 SystemErr     R  at javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.java:88)
[8/30/13 1:56:26:561 SGT] 00000021 SystemErr     R  at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:100)
[8/30/13 1:56:26:561 SGT] 00000021 SystemErr     R  at javax.faces.component.UICommand.broadcast(UICommand.java:120)
[8/30/13 1:56:26:561 SGT] 00000021 SystemErr     R  at javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:973)
[8/30/13 1:56:26:562 SGT] 00000021 SystemErr     R  at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:275)
[8/30/13 1:56:26:562 SGT] 00000021 SystemErr     R  at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1285)
[8/30/13 1:56:26:562 SGT] 00000021 SystemErr     R  at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:711)
[8/30/13 1:56:26:562 SGT] 00000021 SystemErr     R  at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:34)
[8/30/13 1:56:26:562 SGT] 00000021 SystemErr     R  at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171)
[8/30/13 1:56:26:563 SGT] 00000021 SystemErr     R  at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
[8/30/13 1:56:26:563 SGT] 00000021 SystemErr     R  at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)
[8/30/13 1:56:26:563 SGT] 00000021 SystemErr     R  at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1225)
[8/30/13 1:56:26:563 SGT] 00000021 SystemErr     R  at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:775)
[8/30/13 1:56:26:564 SGT] 00000021 SystemErr     R  at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:457)
[8/30/13 1:56:26:564 SGT] 00000021 SystemErr     R  at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
[8/30/13 1:56:26:564 SGT] 00000021 SystemErr     R  at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136)
[8/30/13 1:56:26:564 SGT] 00000021 SystemErr     R  at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:97)
[8/30/13 1:56:26:564 SGT] 00000021 SystemErr     R  at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:77)
[8/30/13 1:56:26:564 SGT] 00000021 SystemErr     R  at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195)
[8/30/13 1:56:26:565 SGT] 00000021 SystemErr     R  at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91)
[8/30/13 1:56:26:565 SGT] 00000021 SystemErr     R  at com.belsize.servlet.filter.RedirectLogin.doFilter(RedirectLogin.java:177)
[8/30/13 1:56:26:565 SGT] 00000021 SystemErr     R  at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195)
[8/30/13 1:56:26:565 SGT] 00000021 SystemErr     R  at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91)
[8/30/13 1:56:26:565 SGT] 00000021 SystemErr     R  at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:928)
[8/30/13 1:56:26:565 SGT] 00000021 SystemErr     R  at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1025)
[8/30/13 1:56:26:566 SGT] 00000021 SystemErr     R  at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:87)
[8/30/13 1:56:26:566 SGT] 00000021 SystemErr     R  at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:908)
[8/30/13 1:56:26:566 SGT] 00000021 SystemErr     R  at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662)
[8/30/13 1:56:26:566 SGT] 00000021 SystemErr     R  at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195)
[8/30/13 1:56:26:566 SGT] 00000021 SystemErr     R  at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:453)
[8/30/13 1:56:26:566 SGT] 00000021 SystemErr     R  at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:515)
[8/30/13 1:56:26:567 SGT] 00000021 SystemErr     R  at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:306)
[8/30/13 1:56:26:567 SGT] 00000021 SystemErr     R  at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83)
[8/30/13 1:56:26:567 SGT] 00000021 SystemErr     R  at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:166)
[8/30/13 1:56:26:567 SGT] 00000021 SystemErr     R  at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
[8/30/13 1:56:26:567 SGT] 00000021 SystemErr     R  at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
[8/30/13 1:56:26:568 SGT] 00000021 SystemErr     R  at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
[8/30/13 1:56:26:568 SGT] 00000021 SystemErr     R  at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
[8/30/13 1:56:26:568 SGT] 00000021 SystemErr     R  at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
[8/30/13 1:56:26:568 SGT] 00000021 SystemErr     R  at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
[8/30/13 1:56:26:568 SGT] 00000021 SystemErr     R  at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1691)

【问题讨论】:

【参考方案1】:

当您的私钥是 putty 格式而不是 open ssh 格式时,也会出现此错误。

您可以使用工具 puttygen 将密钥转换为开放 ssh 格式的私钥。

这为我解决了问题。在我的情况下,无需使用 netbeans 8.0.2 和 Java 8_25 替换 Java 文件。

【讨论】:

PuTTY 密钥生成器:1) 加载现有的私钥文件。 2) 转换:导出 OpenSSH 密钥【参考方案2】:

默认情况下,JDK 或 JRE 附带的 JCE 策略不支持此类加密技术,例如(ase-256 等)。

当然,您必须将当前的 JCE jar(存在于 $JAVA_HOME/jre/lib/security 上)替换为您从 oracle 网站获得的兼容 Jave 版本。

下载链接:

对于 JDK 1.6:https://www.oracle.com/java/technologies/jce-6-download.html

对于 JDK 1.7:https://www.oracle.com/java/technologies/javase-jce7-downloads.html

对于 JDK 1.8:https://www.oracle.com/java/technologies/javase-jce8-downloads.html

这将解决问题。

【讨论】:

哇。不知道 Java 附带有残缺的加密。 它对我不起作用。我在 android Studio 的 gradle 中使用 ant.scp 与“sshAntTask 'org.apache.ant:ant-jsch:1.9.6”依赖关系。我错过了什么吗? 非常好。在我的 $JAVA_HOME/jre/lib/security 文件夹中已经有这两个用于 jce 的库,但我意识到我的新 Eclipse-Neon 使用了它自己的 JRE。所以你有两个选择,在 Eclipse 的 Preferences 中更改 JRE,或者在 Eclipse JRE 安全文件夹中复制这两个库。 @JürgenHörmann 这仅与法律问题有关(与技术无关,如果您认为可以通过额外的官方下载来解决)。简而言之:在几个国家/地区存在进口控制限制(与加密功能相关),Oracle 必须遵守基本的 JRE 分布 上一个 Java 8 JDK (118) 没有这个问题。我使用带有 GitLab 存储库的 Egit(Eclipse 中的 Git)越过了它。所以我只是更新了 JDK,这是在 Windows 7-64 上。【参考方案3】:

您需要添加到您的 JRE - java 无限强度策略,例如: http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html 请替换服务器 JRE 路径上的 local_policy 和 us_export_policy (\lib\安全) 其他版本的 JCE 政策可以在 oracle 网页上找到。

【讨论】:

嗨,我的 java 版本“1.6.0_23”Java(TM) SE 运行时环境(内部版本 1.6.0_23-b05)。在 Jsch 中,提到 J2SE 1.4.0 或更高版本,不需要额外的库 是的,你有 JCE - 毫无疑问,但相信我,我也在为同样的事情苦苦挣扎。 JRE 路径上的默认 local_policy.jar 和 US_export_policy.jar,防止使用您提到的密钥 You size。必须下载JCE无限强度管辖库,接下来请用我之前建议的替换旧库。 另外,请看:jcraft.com/jsch/README,上面写着“然后,J2SE 1.4.2(或更高版本)默认不支持aes256”和“我们已经通过应用确认” Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files [...] 我们可以享受 'aes256-cbc,aes256-ctr'。

以上是关于密码“aes256-cbc”是必需的,但它不可用的主要内容,如果未能解决你的问题,请参考以下文章

如何在iOS Swift 3中加密AES 256 CBC,如laravel encrypt()方法

使用OpenSSL进行AES-256 / CBC加密并使用C#进行解密

Java 等效于 OpenSSL AES CBC 加密

无法使用来自 AES-256-CBC 的 pgcrypto 解密,但 AES-128-CBC 可以

使用 Java 解密 AES256 CBC

学习修复Laravel The only supported ciphers are AES-128-CBC and AES-256-CBC