【发布时间】:2012-06-07 11:04:36
【问题描述】:
是否可以在不使用 Java 证书的情况下将 ssl 与 HttpURLConnection 一起使用?
我想使用随机数或对称密钥。
【问题讨论】:
-
所以你想要 SSL 但你不想要 SSL?问题没有意义。 NB SSL 已经使用对称密钥。
标签: java ssl https network-programming
是否可以在不使用 Java 证书的情况下将 ssl 与 HttpURLConnection 一起使用?
我想使用随机数或对称密钥。
【问题讨论】:
标签: java ssl https network-programming
是的,您可以使用预共享密钥来建立 TLS 连接,不需要证书。
Clover 发布了由 Bouncy Castle 提供支持的 TLS PSK JSSE 套接字工厂。
见https://github.com/clover?q=pskfactories
另外,WolfSSL 似乎也有一个支持 PSK 的 JSSE 实现。不幸的是,它依赖于本机代码,因此启动和运行可能比纯 Java 需要更多的工作。除非您购买商业许可证,否则它也是 GPLv2。
【讨论】:
尽管SSL/TLS doesn't strictly require certificates,HTTPS 需要证书,因为RFC 2818(特别是第 3.1 节)明确指的是 X.509 证书。
您可以在this answer on ServerFault 中找到与非常相似的问题的更多详细信息。
您在没有证书的情况下所做的任何事情都将超出 RFC 2818 的范围,但它可能仍然有效(并且有意义)。但是,其他实现支持它可能会有所不同。 如果您选择不使用证书,您仍然需要一种方法来验证服务器的身份,以确保通信的安全。
编辑:
Oracle provider for JSSE 不支持 PSK 密码功能(或 OpenPGP 证书)。最接近共享密钥的是 Kerberos 密码套件。
【讨论】:
查看以下问题的公认答案:
How to ignore SSL certificate errors in Apache HttpClient 4.0
您只需要创建一个基本上不检查任何内容而只信任所有内容的 TrustManager。虽然我可以理解为什么这在开发时很有用,但这确实否定了 SSL 的目的。 TrustManager 可以避免中间人攻击,其中第三方冒充服务器拦截和操纵数据等,因此如果您不验证服务器证书,任何人都可以提供“无效”证书!
【讨论】:
不,你不能。您需要证书才能通过 HTTPS 连接。您可以出于您的目的使用自签名证书。
【讨论】:
是的,您可以在 SSL/TLS 中使用多种不同的身份验证方法,包括对称密钥(PSK 密码套件)和用户名/密码组合(SRP 密码套件)。我不能说 Java 内置机制,但 SecureBlackbox 产品(包括其 Java 版本)允许您在 SSL/TLS 通道的客户端和服务器端使用提到的机制。这也适用于提供的 HTTPS 客户端和服务器组件。
【讨论】:
SSL 需要证书,但您可以像这样创建自签名证书:
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048
此证书将存储在 keystore.jks 中,有效期为 360 天。
根据您的 http 服务器实现,您通常会通过提供 keystoreFile 参数和 keystorePass 来设置密码(属性名称取自 Apache Tomcat 的 HTTP 连接器,但它们在其他http 服务器。
【讨论】: