设为首页 收藏本站
查看: 649|回复: 0

[经验分享] 不用keytool,tomcat打开https

[复制链接]

尚未签到

发表于 2017-1-24 07:14:19 | 显示全部楼层 |阅读模式
网上大多数文章都是用keytool生成自签名根证书,将根证书配置在tomcat的server.xml中。我不太喜欢用keytool,原因:
1.我们可能换provider,不同的provider会有不同的算法实现,算法的安全性和性能也可能不同,通过代码生成比较方便一些,不同算法的实现要放在classpath上。
2.通过代码生成还有一个好处,会对整个流程理解的比较清楚,实现的原理到底是怎样的。
 
要用到https,也就是TLS或者SSL,我们需要有证书,要么是法定证书机构(VeriSign,中国估计也有代理)给你签发的可信证书,要么自己给自己颁发一个根证书。自己给自己颁发的证书,浏览器是不信任的,会弹出一个提示框。
 
SSL认证分为双向认证和单向认证(客户端认证服务器),一般做网站单向认证就可,客户端要认证服务器端的证书,认证通过,通过非对称加密算法交换秘密密钥,以后的通信数据通过秘密密钥加密。
 
所以说要想用https,就得现有证书。有证书就得现有公私钥。
    public static KeyPair generateKeyPair() throws NoSuchAlgorithmException,

           NoSuchProviderException {

       // create the keys

       KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");

       generator.initialize(1024, new SecureRandom());

       return generator.generateKeyPair();

    }

 
 
 
有了公私钥,接着就生成证书。
    public static X509Certificate generateX509V3RootCertificate(KeyPair pair)

           throws NoSuchAlgorithmException, NoSuchProviderException,

           CertificateEncodingException, InvalidKeyException,

           IllegalStateException, SignatureException {

       X509V3CertificateGenerator certGen = new X509V3CertificateGenerator();

        certGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()));

       certGen.setIssuerDN(new X500Principal(

              "CN=localhost, OU=Ldd600 Blog, O=SHA, C=cn"));

       certGen.setNotBefore(new Date(System.currentTimeMillis() - 5000L));

       certGen.setSubjectDN(new X500Principal(

              "CN=localhost, OU=Ldd600 Blog, O=SHA, C=cn"));

       certGen.setPublicKey(pair.getPublic());

       certGen.setSignatureAlgorithm("SHA1WithRSA");

       certGen.setNotAfter(new Date(System.currentTimeMillis()

              + Integer.MAX_VALUE));

       return certGen.generate(pair.getPrivate(), new SecureRandom());

    }
 
    public static X500PrivateCredential createRootCredential(KeyPair rootPair)

           throws Exception {

       X509Certificate rootCert =

              generateX509V3RootCertificate(rootPair);

       return new X500PrivateCredential(rootCert, rootPair.getPrivate());

    }
 
有了证书,我们要将证书存储起来,根证书是自签名的证书,凡是通过根证书签名颁发的证书都是可信任的。根证书需要添加到信任证书链中。而根证书我们自己给自己签名的证书是给SSL协议用的。
KeyStore是用来保存key,证书的。
Tomcat的keystore有两个
Server keystore: 存放的是服务器用的公私钥key
Trust keystore:存放的是所有确定信任的证书。自己给自己颁发的证书当然是值得我们自己信任的。以后可以用来认证通信的另外一方,不过单向认证应该用不到,
 
publicstaticvoid main(String[] args) throws Exception {

      

       //trustsotre, my root certificate

       KeyStore store = KeyStore.getInstance("JKS");

       // initialize

        store.load(null, null);

        KeyPair rootPair = generateKeyPair();

       X500PrivateCredential rootCredential = createRootCredential(rootPair);

       store.setCertificateEntry(TRUST_STORE_NAME, rootCredential.getCertificate());

       store.store(

                new FileOutputStream(TRUST_STORE_NAME + ".jks"),

                TRUST_STORE_PASSWORD);

       // server credentials

       store = KeyStore.getInstance("JKS");

       store.load(null, null);

        store.setKeyEntry(

          SERVER_NAME, rootCredential.getPrivateKey(), SERVER_PASSWORD,

                new Certificate[] { rootCredential.getCertificate() });

        store.store(

          new FileOutputStream(SERVER_NAME + ".jks"), SERVER_PASSWORD);

    }
 

将KeyStore文件配置在tomcat的server.xml中
  <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
                 keystoreFile="conf/server.jks" keystorePass="serverPassword" truststoreFile ="conf/trustStore.jks" truststorePass="trustPassword"/>
 
启动tomcat即可
 
打开URL看看效果吧。

DSC0000.jpg

 

点是,就可以打开网页了。

DSC0001.jpg  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-332561-1-1.html 上篇帖子: tomcat 管理状态页面 下篇帖子: tomcat server.xml 解读
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表