内网数字证书的生成与使用
虽然在企业内网之间,通过http明文访问,安全性的影响不大,因为服务器之间主要依靠内外网防火墙隔离来保证安全性,但是考虑到有一些数据的敏感性,通过ssl加密服务器之间的数据传输,能够大大提高安全性。比如黑客突破防火墙进入内网后,可能截取数据,这些在电影中经常上演。所以在服务器之间,或者部分重要服务器上,要求使用数字证书访问,是有一定的作用的。
但是如果有外部CA机构颁发证书,需要额外的成本,且因为数据并不发布到公网上,也没有必要做此类工作,可以通过Java自带的证书生成工具来实现。
SSL加密原理
通俗的讲就是通过非对称密钥算法,通过握手协议,客户端利用公钥加密密码,服务器端收到后通过私钥解密获得客户端的密码,然后服务器端以客户端的密码加密内容将数据发送给客户端,客户端由于保持通路时存储了发送的密码,于是通过密码解密,得到传输的内容。具体可以见引用别人的文章 SSL原理
Java生成数字证书
在Java安装路径bin目录下,有keytool.exe文件 1、生成KeyStore文件 keytool -genkey -validity 360 -alias www.baidu.com -keyalg RSA -keystore d:\baidu.keystore 其中 -genkey表示生成密钥 -validity指定证书有效期(天) -alias指定别名 -keyalg指定算法,公钥算法一般RSA -keystore指定存储位置,这里是d:\baidu.keystore 2、生成自签名证书 证书就是外部使用的公钥,是给客户端使用的。 keytool -export -keystore d:\baidu.keystore -alias www.baidu.com -file d:\baidu.cer -rfc -export指定为导出操作 -keystore指定keystore文件 -alias指定导出keystore文件中的别名 -file指向导出路径 -rfc以文本格式输出,也就是以BASE64编码输出
服务器间的数字证书应用
目前以Tomcat启用ssl应用为例,其他的容器可以参考具体容器的使用方案。 一、打开conf/server.xml被注释的配置
<!-- <Connector SSLEnabled="true" clientAuth="false" maxThreads="150" port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https" secure="true" sslProtocol="TLS"/> -->
取消相关注释 二、指定对应的keystore文件 如上文的baidu.keystore,当然若生成keystore时,忘记指定路径,则默认是在C:\Users<账号名称>下,有一个.keystore的文件。将该文件复制到server.xml的同目录下
第三步,配置server.xml 在第一步的配置中添加两个配置:keystoreFile=“路径/.keystore” keystorePass=“即生成keystore文件时使用的密码”
保存好之后重启tomcat
客户端中需要导入证书,例如浏览器中可以通过安全导入数字证书,由于我们自己创建的证书不是公认的CA机构,所以导入时需要选择导入“受信任的根证书颁发机构”,导入完成后再访问,你会发现网站的前端的安全警告变成了小锁图标,标识证书生效了。 访问https://localhost:8443即可。
|