在没有证书的基于https的java SSL中

是否可以在不使用java中的证书的情况下使用带有httpconnection的ssl? 我想使用随机数或semetric键。

谢谢Raihan

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

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

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

编辑:

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

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

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

看看以下问题的接受答案:

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

您只需要创建一个基本上不检查任何东西并且只信任所有内容的TrustManager。 虽然我可以看到为什么这在开发时很有用,但这确实否定了SSL的目的。 TrustManager可以避免Man In The Middle攻击,其中第三方构成服务器来拦截和操纵数据等,因此如果您不validation服务器证书,任何人都可以提供“无效”证书!

SSL需要证书,但您可以创建一个自签名证书,如下所示:

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

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

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