4

HttpURLConnection是否可以在不使用 Java 证书的情况下使用 ssl ?

我想使用随机数或对称密钥。

4

6 回答 6

2

尽管SSL/TLS 并不严格要求证书,但 HTTPS 需要证书,因为RFC 2818(特别是第 3.1 节)明确提到了 X.509 证书。

您将在 ServerFault 上的这个答案中找到更多详细信息,这是一个非常相似的问题。

无论您在没有证书的情况下做什么都将超出 RFC 2818 的范围,但它可能仍然有效(并且有意义)。但是,其他实现支持它可能会有所不同。如果您选择不使用证书,您仍然需要一种方法来验证服务器的身份,以确保通信的安全性。

编辑:

JSSE的Oracle 提供程序不支持 PSK 密码套件(或 OpenPGP 证书)。最接近共享密钥的是 Kerberos 密码套件。

于 2012-06-07T11:41:52.740 回答
1

不,你不能。您需要证书才能通过 HTTPS 进行连接。您可以出于您的目的使用自签名证书。

于 2012-06-07T11:15:37.563 回答
1

是的,您可以在 SSL/TLS 中使用多种不同的身份验证方法,包括对称密钥(PSK 密码套件)和用户名/密码组合(SRP 密码套件)。我不能说 Java 内置机制,但SecureBlackbox产品(包括其 Java 版本)允许您在 SSL/TLS 通道的客户端和服务器端使用上述机制。这也适用于提供的 HTTPS 客户端和服务器组件。

于 2012-06-07T11:34:24.277 回答
1

是的,您可以使用预共享密钥来建立 TLS 连接,不需要证书。

Clover 发布了由 Bouncy Castle 提供支持的 TLS PSK JSSE 套接字工厂。

https://github.com/clover?q=pskfactories

另外,WolfSSL 似乎也有一个支持 PSK 的 JSSE 实现。不幸的是,它依赖于本机代码,因此启动和运行可能比纯 Java 需要更多的工作。除非您购买商业许可证,否则它也是 GPLv2。

https://www.wolfssl.com/products/wolfssl-jni-jsse/

于 2021-09-05T00:45:43.143 回答
0

查看以下问题的公认答案:

如何忽略 Apache HttpClient 4.0 中的 SSL 证书错误

您只需要创建一个基本上不检查任何内容而只信任所有内容的 TrustManager。虽然我可以明白为什么这在开发时很有用,但这确实否定了 SSL 的目的。TrustManager 可以避免中间人攻击,其中第三方冒充服务器拦截和操纵数据等,因此如果您不验证服务器证书,任何人都可以提供“无效”证书!

于 2012-06-07T13:02:35.827 回答
-2

SSL 需要证书,但您可以像这样创建自签名证书:

keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048

该证书将存储在 keystore.jks 中,有效期为 360 天。

keystoreFile根据您的 http 服务器实现,您通常会通过提供参数将其指向密钥库,并通过 akeystorePass设置密码(从 Apache Tomcat 的 HTTP 连接器获取的属性名称,但它们在其他 http 服务器中是相似的。

于 2012-06-07T11:21:50.553 回答