HTTPS搭建方案
一、 操作步骤
进入jdk的安装目录,切换到bin目录下,然后按顺序执行如下的命令
1、 创建一个密钥库server(服务器端密钥库) localhost配置
keytool -genkey -dname “CN=183.131.13.104,OU=ChinaMobile,O=ChinaMobile,L=HZ, ST=zhejiang, C=CN” -alias server -keyalg RSA -keystore D:\Credential\server.jks -keypass changeit -storepass changeit -validity 36500
2、 导出自己创建的密钥库server别名server的证书为server.cer (服务器端证书)
keytool -export -alias server -file D:\Credential\server.cer -keystore D:\Credential\server.jks -storepass changeit
3、 创建一个密钥库client(客户端密钥库)
keytool -genkey -dname “CN=client, OU= ChinaMobile, O= ChinaMobile, L=HZ, ST=zhejiang, C=CN” -alias client -keyalg RSA -keystore D:\Credential\client.jks -keypass changeit -storepass changeit -validity 36500
4、 导出自己创建的密钥库client别名client的证书为client.cer(客户端证书)
keytool -export -alias client -file D:\Credential\client.cer -keystore D:\Credential\client.jks -storepass changeit
5、 通过JAVA程序进行证书自签名(签发者是密钥库client.jks中的client条目,待签发者是server.cer。程序会产生一个新的密钥库newserver新密钥hiifit;别名是signedserver )
实现代码:https://github.com/wangweilica/CloudExplore/blob/master/src/test/java/com/sunsoft/study/SignCert.java)
6、 导出密钥库newserver中的别名为signedserver为证书newserver.cer
keytool -export -file D:\Credential\newserver.cer -keystoreD:\Credential\newserver.jks -storepass changeit -alias signedserver
7、 在密钥库server.jks中引入client.cer证书(服务端信任客户端)
keytool -import -alias client -keystore D:\Credential\server.jks -file D:\Credential\client.cer -storepass changeit
8、 在密钥库server.jks中引入newserver.cer证书别名为server(覆盖了老的服务端证书)
keytool -import -alias server -keystore D:\Credential\server.jks -file D:\Credential\newserver.cer -storepass changeit
9、 把证书mytest.cer发送给客户端进行安装
双击client.cer–>点击安装证书–>下一步–>将所有证书放入下列存储区,浏览–>受信任的根证书颁发机构–>确定–>下一步–>完成–>是–>导入成功,确定–>确定;完成安装
说明:IE访问正常,chrome,firefox会不信任。需要单独配置,这不做说明了。
如果是通过andorid等客户端访问没有问题,只要导入证书即可~
比如:需要用httpclient访问时,只须执行以下语句:
keytool -import -file D:\\Credential\client.cer -keystore “%JAVA_HOME%\jre\lib\security\cacerts” -alias client -storepass changeit
10、tomcat配置
修改server.xml
解开port=”8443”的注释,
添加: keystoreFile=”D:\Credential\server.jks” keystorePass=”changeit”
truststoreFile=”D:\Credential\client.jks” truststorePass=”changeit”
二、 几点说明
1、 加密原理:
数字证书采用公钥体制,即利用一对互相匹配的密钥进行加密、解密。每个用户自己设定一把特定的仅为本人所知的私有密钥(私钥),用它进行解密和签名;同时设定一把公共密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。当发送一份保密文件时,发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密,这样信息就可以安全无误地到达目的地了。通过数字的手段保证加密过程是一个不可逆过程,即只有用私有密钥才能解密(一般为RSA)。
2、**tomcat中clientAuth配置为true时为双向认证,false为单项验证。
单向认证,就是传输的数据加密过了,但是不会校验客户端的来源
双向认证,如果客户端浏览器没有导入客户端证书,是访问不了web系统的,找不到地址
如果只是加密,我感觉单向就行了。**
如果想要用系统的人没有证书就访问不了系统的话,就采用双向
3、采用自己签发证书,可以不用去CA机构申请,因为只是内部客户端间调用。(补充:数字证书绑定了公钥、数字签名及持有者的真实身份)
4、生成的密钥仓库的后缀名有很多,比如keystore,jks或者没有后缀名都无所谓。其中,jks是一个java中的密钥管理库
5、 如果需要通过CA认证,则需要添加以下流程:
5.1、制作CSR文件。
CSR就是Certificate Secure Request证书请求文件。这个文件是由申请人制作,在制作的同时,系统会产生2个密钥,一个是公钥就是这个CSR文件,另外一个是私钥,存放在服务器上。要制作CSR文件,申请人可以参考WEB SERVER的文档,一般APACHE等,使用OPENSSL命令行来生成KEY+CSR2个文件;Tomcat,JBoss,Resin等则使用KEYTOOL来生成JKS和CSR文件,IIS通过向导建立一个挂起的请求和一个CSR文件。
5.2、CA认证。
将CSR提交给CA,CA一般有2种认证方式:1、域名认证,一般通过对管理员邮箱认证的方式,这种方式认证速度快,但是签发的证书中没有企业的名称;2、企业文档认证,需要提供企业的营业执照。一般需要3-5个工作日。 也有需要同时认证以上2种方式的证书,叫EV证书,这种证书可以使IE7以上的浏览器地址栏变成绿色,所以认证也最严格。
5.3、证书的安装(即第8条)。
在收到CA的证书后,可以将证书部署上服务器,一般APACHE文件直接将KEY+CER复制到文件上,然后修改HTTPD.CONF文件;TOMCAT等,需要将CA签发的证书CER文件导入JKS文件后,复制上服务器,然后修改SERVER.XML;IIS需要处理挂起的请求,将CER文件导入。