Java 没有证书的TLS安全吗?

Java 没有证书的TLS安全吗?,java,security,ssl,certificate,ca,Java,Security,Ssl,Certificate,Ca,我想在我的Java应用程序中实现TLS(该应用程序目前没有实现任何类型的加密)。然后我读了更多关于TLS的内容,发现我应该使用证书 所以我的问题是:如果我不使用证书,TLS也是安全的吗 然后:如果没有: 如何创建这样的证书?什么是好的CAs?我在哪里可以免费获得证书?我如何用Java将证书实现到我的服务器应用程序中 请注意,我只需要一个服务器的证书。不适用于我或电子邮件地址。您始终可以创建自签名证书。它也将是安全的,但在大多数未设置为信任该证书的机器上(无论是在java密钥库中还是在其他地方),

我想在我的Java应用程序中实现TLS(该应用程序目前没有实现任何类型的加密)。然后我读了更多关于TLS的内容,发现我应该使用证书

所以我的问题是:如果我不使用证书,TLS也是安全的吗

然后:如果没有: 如何创建这样的证书?什么是好的CAs?我在哪里可以免费获得证书?我如何用Java将证书实现到我的服务器应用程序中


请注意,我只需要一个服务器的证书。不适用于我或电子邮件地址。

您始终可以创建自签名证书。它也将是安全的,但在大多数未设置为信任该证书的机器上(无论是在java密钥库中还是在其他地方),它都会发出危险信号

运行:

keytool
指定为完整路径(取决于操作系统和Java的设置方式)

然后,您可以通过以下方式导出公共证书:

keytool -exportcert -keystore javakeystore_keepsecret.jks -alias [certname] -file [somefilename]

然后,用户可以导入创建的文件以信任它。

您始终可以创建自签名证书。它也将是安全的,但在大多数未设置为信任该证书的机器上(无论是在java密钥库中还是在其他地方),它都会发出危险信号

运行:

keytool
指定为完整路径(取决于操作系统和Java的设置方式)

然后,您可以通过以下方式导出公共证书:

keytool -exportcert -keystore javakeystore_keepsecret.jks -alias [certname] -file [somefilename]
然后用户可以导入创建的文件以信任它

所以我的问题是:如果我不使用证书,TLS也是安全的吗

这取决于您选择的密码套件。如果您仅使用服务器身份验证的主要模式,那么您可能需要服务器证书,因为提供了密码套件,如
DHE-RSA-AES128-SHA
EDH-RSA-DES-CBC3-SHA
DHE-RSA-AES128-SHA
EDH-RSA-DES-CBC3-SHA
要求使用服务器证书

但是,如果您允许匿名密码套件,如匿名Diffie Hellman(ADH),则不需要服务器证书

此外,如果您使用的是
TLS-PSK
TLS-SRP
,则不需要服务器证书。PSK是预共享密钥;SRP是安全的远程密码。IANA有88套密码套件专门用于PSK和SRP(请参阅)

PSK和SRP提供相互认证和通道绑定。也就是说,双方都可以证明对共享秘密的了解,而不必像使用
basic\u auth
方案那样做一些愚蠢的事情,比如用纯文本将秘密放到电线上。如果一方(或双方)不知道该秘密,则通道设置失败,不会泄露任何信息

PSK和SRP具有所有SSL/TLS密码套件中最理想的安全属性。如果可能,您应该始终使用它们


然后:如果没有它就不安全:我如何创建这样的证书

这是留给读者的练习


什么是好的CAs

在我看来,没有一个。没有理由向第三方授予信任

雪上加霜的是,公共CA并不保证您的期望,并试图在其认证实践声明(CPS)中免除所有责任。例如,这里有一段摘录自:

所以,苹果向你出售的产品没有保修,也没有责任!!!他们希望你信任他们,给他们钱。。。多吵啊!而且不仅仅是苹果,其他CA也有同样淫秽的CP


我在哪里可以免费获得证书

试试看

它们不是完全免费的,但它们是免费发行的。如果您需要吊销StartCom证书,则必须付款。这是因为成本在于撤销,而不是发行。(其他CA会提前向您收取撤销费用,如果未使用,则将其放入口袋)


我如何用Java将证书实现到我的服务器应用程序中

这取决于你的申请。我们对你的应用程序一无所知,所以不能说

所以我的问题是:如果我不使用证书,TLS也是安全的吗

这取决于您选择的密码套件。如果您仅使用服务器身份验证的主要模式,那么您可能需要服务器证书,因为提供了密码套件,如
DHE-RSA-AES128-SHA
EDH-RSA-DES-CBC3-SHA
DHE-RSA-AES128-SHA
EDH-RSA-DES-CBC3-SHA
要求使用服务器证书

但是,如果您允许匿名密码套件,如匿名Diffie Hellman(ADH),则不需要服务器证书

此外,如果您使用的是
TLS-PSK
TLS-SRP
,则不需要服务器证书。PSK是预共享密钥;SRP是安全的远程密码。IANA有88套密码套件专门用于PSK和SRP(请参阅)

PSK和SRP提供相互认证和通道绑定。也就是说,双方都可以证明对共享秘密的了解,而不必像使用
basic\u auth
方案那样做一些愚蠢的事情,比如用纯文本将秘密放到电线上。如果一方(或双方)不知道该秘密,则通道设置失败,不会泄露任何信息

PSK和SRP具有所有SSL/TLS密码套件中最理想的安全属性。如果可能,您应该始终使用它们


然后:如果没有它就不安全:我如何创建这样的证书

这是留给读者的练习


什么是好的CAs

在我看来,没有一个。没有理由向第三方授予信任

雪上加霜的是,公共CA并不保证您的期望,并试图在其认证实践声明(CPS)中免除所有责任。例如,这里有一段摘录自:

所以,苹果向你出售的产品没有保修,也没有责任!!!他们希望你信任他们,给他们
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.