我想将TLS实现到我的Java应用程序(目前不实现任何加密)。然后我读了一些关于TLS的内容,看到我应该使用证书。
所以我的问题是:如果我不使用证书,TLS也是安全的吗?
然后:如果没有安全措施则不安全: 我如何创建这样的证书?什么是好的CA?我在哪里可以免费获得证书?如何在Java中将证书实现到我的服务器应用程序中?
请注意,我只需要一台服务器的证书。不适合我或电子邮件地址。
答案 0 :(得分:3)
所以我的问题是:如果我不使用证书,TLS也是安全的吗?
这取决于您选择的密码套件。如果您仅使用主要的服务器身份验证模型,那么由于提供了DHE-RSA-AES128-SHA
或EDH-RSA-DES-CBC3-SHA
等密码套件,您可能需要服务器证书。 DHE-RSA-AES128-SHA
或EDH-RSA-DES-CBC3-SHA
需要使用服务器证书。
但是,如果您允许匿名密码套件(如Anonymous Diffie-Hellman(ADH)),则不需要服务器证书。
此外,如果您使用TLS-PSK
或TLS-SRP
,则不需要服务器证书。 PSK是预共享密钥;和SRP是安全远程密码。 IANA有88个专用于PSK和SRP的密码套件(见Transport Layer Security (TLS) Parameters)。
PSK和SRP提供相互身份验证和通道绑定。也就是说,双方都证明了共享秘密的知识,而没有像在basic_auth
方案中那样在明文中将秘密放在网上。如果一方(或两方)不知道该秘密,则频道设置失败,没有信息泄露。
PSK和SRP具有所有SSL / TLS密码套件的最所需的安全属性。如果可能,您应该始终使用它们。
然后:如果没有安全措施:我如何创建这样的证书?
这是一个留给读者的练习。
什么是优秀的CA?
在我看来,没有一个。没有理由给予第三方信任。
为了增加对伤害的侮辱,公共CA不保证您的期望,并试图在其认证实践声明(CPS)中承担所有责任。例如,这是摘录自Apple Inc. Certification Authority Certification Practice Statement:
2.4.2. CA disclaimers of warranties
To the extent permitted by applicable law, Subscriber agreements,
if applicable, disclaim warranties from Apple, including any
warranty of merchantability or fitness for a particular purpose.
2.4.3. CA limitations of liability
To the extent permitted by applicable law, Subscriber agreements,
if applicable, shall limit liability on the part of Apple and shall
exclude liability for indirect, special, incidental, and
consequential damages.
因此,Apple向您出售没有保修的产品,并且不承担任何责任!而且他们希望你信任他们并给他们钱......真是个球拍!而且不只是苹果公司 - 其他CA也同样具有淫秽的CPS。
我在哪里可以免费获得证书?
尝试StartCom。
他们不是完全免费,但他们是免费发行的。如果您需要撤销StartCom证书,那么您将需要付费。那是因为成本是撤销,而不是发行。 (其他CA会向您收取撤销费用,然后如果未使用则将钱存入您的手中)。
如何在Java中将证书实现到我的服务器应用程序中?
这取决于您的申请。我们对您的应用一无所知,所以我们不能说。
答案 1 :(得分:2)
您始终可以创建自签名证书。它也是安全的,但是在大多数未设置为信任该证书的机器上(无论是在java密钥库中还是其他),它都会发出红色标记。
执行命令
keytool -genkeypair -alias [certname] -keyalg EC -keysize 571 -validity 730 -keystore javakeystore_keepsecret.jks
将keytool
指定为完整路径(取决于操作系统以及如何设置Java)。
然后,您可以使用以下内容导出公共证书:
keytool -exportcert -keystore javakeystore_keepsecret.jks -alias [certname] -file [somefilename]
然后用户可以导入创建的文件以信任它。
答案 2 :(得分:0)
如果我不使用证书,TLS也是安全的吗?
没有。来自RFC 2246:
警告:完全匿名连接仅提供保护 反对被动窃听。除非是一个独立的篡改 - 证明通道用于验证完成的消息 没有被攻击者取代,服务器身份验证是 在活跃的中间人的环境中需要 攻击是一个问题。
和
系统只有最弱的密钥交换和 支持验证算法