在没有证书的java SSL over https中

时间:2012-06-07 11:04:37

标签: java ssl https network-programming

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

感谢 Raihan

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

How to ignore SSL certificate errors in Apache HttpClient 4.0

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

答案 3 :(得分:0)

虽然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密码套件。

答案 4 :(得分:-2)

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服务器中类似。