美文网首页
Java自签名https证书

Java自签名https证书

作者: _奔跑的蜗牛_ | 来源:发表于2016-05-24 10:33 被阅读2280次

    HTTPS搭建方案

    一、 操作步骤

    进入jdk的安装目录,切换到bin目录下,然后按顺序执行如下的命令
    1、 创建一个密钥库server(服务器端密钥库) localhost配置

    keytool -genkey -dname "CN=XX.XX.XX.XX,OU=ChinaMobile,O=ChinaMobile,L=HZ, ST=zhejiang, C=CN" -alias server -keyalg RSA -keystore /home/cxb/credential/server.jks -keypass xxx -storepass xxx -validity 36500

    2、 导出自己创建的密钥库server别名server的证书为www.my.com.cer (服务器端证书)

    keytool -export -alias server -file /home/cxb/credential/server.cer -keystore /home/cxb/credential/server.jks -storepass xxx

    3、 创建一个密钥库client(客户端密钥库)

    keytool -genkey -dname "CN=client, OU= , O= , L=HZ, ST=zhejiang, C=CN" -alias client -keyalg RSA -keystore /home/cxb/credential/client.jks -keypass xxx -storepass xxx -validity 36500

    4、 导出自己创建的密钥库client别名client的证书为client.cer(客户端证书)

    keytool -export -alias client -file /home/cxb/credential/client.cer -keystore /home/cxb/credential/client.jks -storepass xxx

    5、 通过JAVA程序进行证书签名(签发者是密钥库client.jks中的client条目,待签发者是server.cer。程序会产生一个新的密钥库newserver新密钥hiifit;别名是signedserver )

    Java实现

    6、 导出密钥库newserver中的别名为signedserver为证书newserver.cer

    keytool -export -file /home/cxb/credential/newserver.cer -keystore /home/cxb/credential/newserver.jks -storepass xxx -alias signedserver

    7、 在密钥库server.jks中引入client.cer证书(服务端信任客户端)

    keytool -import -alias client -keystore /home/cxb/credential/server.jks -file /home/cxb/credential/client.cer -storepass xxx

    8、 在密钥库server.jks中引入newserver.cer证书别名为server(覆盖了老的服务端证书)

    keytool -import -alias server -keystore /home/cxb/credential/server.jks -file /home/cxb/credential/newserver.cer -storepass xxx

    9、 把证书mytest.cer发送给客户端进行安装

    双击client.cer-->点击安装证书-->下一步-->将所有证书放入下列存储区,浏览-->受信任的根证书颁发机构-->确定-->下一步-->完成-->是-->导入成功,确定-->确定;完成安装
    10、tomcat配置
    修改server.xml
    解开<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"的注释,添加: keystoreFile="/home/cxb/credential/server.jks" keystorePass="xxx" truststoreFile="/home/cxb/credential/client.jks" truststorePass="xxx"

    二、 几点说明

    1、 加密原理:
    数字证书采用公钥体制,即利用一对互相匹配的密钥进行加密、解密。每个用户自己设定一把特定的仅为本人所知的私有密钥(私钥),用它进行解密和签名;同时设定一把公共密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。当发送一份保密文件时,发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密,这样信息就可以安全无误地到达目的地了。通过数字的手段保证加密过程是一个不可逆过程,即只有用私有密钥才能解密(一般为RSA)。
    2、tomcat中clientAuth配置为true时为双向认证,false为单项验证。
    单向认证,就是传输的数据加密过了,但是不会校验客户端的来源
    双向认证,如果客户端浏览器没有导入客户端证书,是访问不了web系统的,找不到地址
    如果只是加密,我感觉单向就行了。
    如果想要用系统的人没有证书就访问不了系统的话,就采用双向
    3、采用自己签发证书,可以不用去CA机构申请,因为只是内部客户端间调用。(补充:数字证书绑定了公钥、数字签名及持有者的真实身份)
    4、生成的密钥仓库的后缀名有很多,比如keystore,jks或者没有后缀名都无所谓。其中,jks是一个java中的密钥管理库

    三、 疑惑问题

    1、 如何通过httpclient载入证书,发送请求?

    keytool -import -file /home/cxb/credential/client.cer -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -alias client -storepass changeit

    2、 CA机构颁发的证书的原理?(比如证书有没有加密,又是如何揭秘的。)
    3、 数字签名的作用,难道仅仅是做身份辨认吗?有没有加密,如何加密解密 ?

    四、 几个重要命令

    查看是否导入成功:通过命令行如下

    keytool -v -list -keystore “%JAVA_HOME%\jre\lib\security\cacerts” -storepass changeit
    删除证书:

    keytool -delete –alias server -keystore “%JAVA_HOME%\jre\lib\security\cacerts” -storepass changeit

    相关文章

      网友评论

          本文标题:Java自签名https证书

          本文链接:https://www.haomeiwen.com/subject/fjlzrttx.html