`
kyleliu
  • 浏览: 27679 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SSL/TLS服务器配置

阅读更多
Secure Sockets Layer (SSL) 和Transport Layer Security (TLS) 用于在客户端和服务器之间建立加密通信通道。

JAVA通过JSSE(javax.net.ssl) , 提供了对SSL和TLS的支持。通过其所提供的一系列API,开发者可以像使用普通Socket一样使用基于SSL或TLS的安全套接字,而不用关心 SSL和TLS协议的细节,例如握手的流程等等。这使利用JAVA开发安全的SSL/TLS服务器或客户端非常容易。

如何使用javax.net.ssl,在网上有很多相关的资料,这里就不多说了。

下面主要说一说如何配置SSL/TLS服务器。

Sun在JDK中提供了一个安全钥匙与证书的管理工具Keytool。Keytool 把钥匙,证书以及和与它们相关联的证书链储存到一个keystore,默任的实现keystore的是一个文件,它有一个密码保护存储在其中的内容。

配置一个SSL/TLS服务器需要以下几步:

假设服务器的域名是:test.server.net

1.为服务器的keystore,以存储证书等。
keytool -genkey -alias test.server.net -keyalg RSA -keystore <your_keystore_filename>
在执行上面的命令式,会要求用户输入一些信息,例如keystore密码,服务器区域等等,依照提示输入即可。

2.生成一个Certificate Signing Request (CSR),CSR是提供给证书颁发机构,供证书颁发机构依据其中信息生成证书的。
keytool -certreq -keyalg RSA -alias test.server.net -file certreq.csr -keystore <your_keystore_filename>

3.将CSR提供给证书颁发机构CA,等待CA颁发证书:
知名的CA有Versign, Thawte等。

4.在CA等网站上下载CA的根证书。

5.导入CA的根证书到keystore中
keytool -import -alias root -keystore <your_keystore_filename> -trustcacerts -file <filename_of_the_root_certificate>

6.导入CA颁发的证书到keystore,CA通常不会直接返回一个文件,而是通过网页或email以文本形式提供,需要用户自己创建一个文件,再将文本拷入。
keytool -import -alias test.server.net -keystore <your_keystore_filename> -trustcacerts -file <your_certificate_filename>

这样就完成对服务器的配置,最后为服务器指定这个keystore就可以了。


注意:一定导入正确的CA根证书,最常见的错误就是没有导入或导入错误的CA根证书。

注意:有些客户端,在使用SSL/TLS时必须通过域名来连接服务器,不能通过IP地址来连接。其所连接的服务器域名和服务器的证书的颁发对象必须相同。例如服务器的域名是test.server.net,那么服务器的证书也必须是颁发给test.server.net的。

证书颁发机构都会免费提供给用户用于测试的证书和相关的根证书,这种测试用的证书通常只有14天到30天不等的有效期。

在SSLServerSocket这个类中有一个setNeedClientAuth方法,当这个选项设为true时,客户端和服务器在协商时,服务器会要求客户端也提供验证信息,如果客户端不能提供,服务器就会终止会话。

这需要一些额外的配置:

假设客户端是alice,服务器是server


一个客户端的KeyStore文件,该文件中包含了对alice的授权:
keytool -genkey -alias alice -keystore <client_keystore_filename>

一个服务器端的KeyStore文件,该文件中包含了对server的授权。
keytool -genkey -alias server -keystore <server_keystore_filename>

一个名为clientTrust的客户端TrustStore文件,该文件中包含了对server的授权
keytool -export -alias server -keystore serverKeys -file server.cer
keytool -import -alias server -keystore clientTrust -file server.cer

一个名为serverTrust的服务器端TrustStore文件,该文件中包含了对alice的授权
keytool -export -alias alice -keystore clientKeys -file alice.cer
keytool -import -alias alice -keystore serverTrust -file alice.cer

将客户端的证书加入到服务器的TrustStore中,同时将服务器的证书加入到客户端的TrustStore中,使客户端和服务器互相信任。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics