当前位置: 首页 > 面试题库 >

Java和SSL-java.security.NoSuchAlgorithmException

仉洲
2023-03-14
问题内容

我已经构建了一个Java程序作为服务器上数据库的前端,并且正在尝试使用SSL加密客户端和服务器之间的流量。这是我发出的用于创建服务器证书的命令:

keytool -genkey -alias localhost -keyalg RSA -keypass kpass123 -storepass kpass123 -keystore keystore.jks

以下是相关代码:

System.setProperty("javax.net.ssl.keyStore",
                   "G:/Data/Android_Project/keystore.jks");

System.setProperty("javax.net.ssl.keyPassword", "kpass123");

SSLServerSocketFactory factory = 
    (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();

SSLServerSocket accessSocket = 
    (SSLServerSocket)factory.createServerSocket(DB_ACCESS_PORT);

当我尝试运行此命令时,我发现了这一点:

java.security.NoSuchAlgorithmException:构造实现时出错(算法:默认,提供程序:SunJSSE,类:com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)

我还发现“ KeyPairGenerator”服务具有可用的算法DIFFIEHELLMAN,DSA和RSA,而“
SSLContext”具有算法SSL,TLS,SSLV3,DEFAULT,TLSV1。

我是否需要找到将RSA安装到SSLContext服务中的方法?我什至在寻找正确的服务吗?我不应该使用RSA吗?

我是整个SSL的新手-安全-证书一事,这让我感到震惊,因为这些不同的服务中的每一个都应该使用相同的算法来访问相同的证书。


问题答案:

试试javax.net.ssl.keyStorePassword代替javax.net.ssl.keyPassword:JSSE参考指南中没有提到后者。

您提到的算法默认情况下应该使用默认的安全提供程序存在。NoSuchAlgorithmExceptions通常是由其他潜在的异常引起的(找不到文件,错误的密码,错误的密钥库类型等)。查看完整的堆栈跟踪很有用。

如果堆栈跟踪中的信息不足,则还可以使用-Djavax.net.debug=ssl,至少使用-Djavax.net.debug=ssl,keymanager来获取更多调试信息。



 类似资料:
  • 问题内容: 我正在尝试使用安全套接字层(HTTPS)与Java中的PHP脚本建立连接,但是我发现为了确保最大的安全性/有效性,我必须将网站使用的SSL证书导入到我的应用程序中…我不知道该怎么做。 如果有帮助,我的SSL证书不是自签名的,而是由StartSSL提供的,并且我正在使用Eclipse IDE。 有人能指出我正确的方向吗?即,我需要什么文件,应该在哪里导入它们,以及在Java中需要什么代码

  • 问题内容: 我的Java程序如何知道包含证书的密钥库在哪里?或者,如何告诉我的Java程序在哪里寻找密钥库? 在以某种方式指定了密钥库之后,如何指定用于对服务器进行身份验证的证书? 问题答案:

  • 问题内容: 理想情况下,我只需要一个简单的。 我已经有一个可以通过普通读写消息的组件,但是对于其中的某些连接,我必须通过有线方式使用SSL。这些连接上的操作是相同的。 有谁知道免费的实现(使用适当的选择器)或类似的东西?我已经找到了,但是选择器不接受它,因为它的供应商不是SUN。 我正在通过一个简单的对象从网络数据的插入和检索中将read_from / writing_to逻辑与网络逻辑分离,以便

  • 我似乎无法将Dropwizard配置为使用ssl。 我创建了一个密钥 和证书 并将其导入密钥库 从那里,我将密钥库.jks文件放入/src/主/资源中,与用于删除向导的配置.yaml文件一起放置。 然后,我尝试根据手册为dropwizard配置ssl: 然而,当我导航到登录页面时,它只在没有https的情况下工作:并在使用https时给出错误107(net::ERR _ SSL _ PROTOCO

  • 问题内容: 在我们的网站中,某些页面使用SSL,但是大多数页面却不使用SSL(因为它们需要由网络漫游器抓取)。 它几乎可以归结为用户登录的任何页面,除了SSL协议之外,有一些例外, 但是用户首先必须从非https页面登录(登录表单是从任何页面的屏幕顶部拖放的表单)。 所以, 如何通过ajax强制请求使用SSL? 这样安全吗? 问题答案: 它违反了JavaScript的同源策略,因为它没有看到HTT

  • 如果我使用Cloudfront坐在Web服务器前面,而Web服务器本身就在ELB后面,那么下面的内容适用吗? > 我使用Route53为CF域创建域名记录并将SSL证书应用于该域以保护分发 如果CF不能提供来自缓存的内容,那么SSL连接将被转发到ELB(它将web服务器作为源服务器) 因此,我还需要在ELB上使用相同的域名(FQDN)(通过Route53 CNAME)并在那里申请相同的证书? 当C