软件密码和https协议

    密码安全问题,一直是程序员最痛疼的问题,这一章主要的来说一下密码的安全,和怎么提高密码的安全,还有Tomcat的https协议。

  密码对于一个程序的安全有多重要就不多说了,如果你做过银行系统的话,那么密码是必须考虑的问题,密码是重中之重,正常的系统对于密码的操作的话可能是这样

  

  这样的密码加密有一个特殊的名称,叫做“对称密码”,如果程序的密码是这样的方式来加密解密的话,那我告诉你,这样的密码在黑客高手很快就能破解,估计这样的加密对黑客来说,这就是小儿科。

  这样不行,那么我们专业的程序员又有了另一种的加密方式,晋级的方法,这个我们叫做非对称加密,那么如果你用非对称加密会生成一对密钥,一个叫公钥,一个叫私钥,这个有一个特点,就是公钥生成的密码,只能用私钥来解密,私钥生成的只能用公钥来解,这样的作法使我们的密码的安全又进行了一个档次。具体如图所示:

  通过B提供的公钥,那么A就把密码加密,这个加密的密码只能通过B的私钥来解密,所以这个密码泄漏的安全问题的危险系数大大的降低,但是,这里提一个问题,这样的加密,如果有个C,同样有一对,公钥和私钥的话,那么密码又会被泄露。怎么做呢?也就是说A,怎么知道这个公钥是B的还是C的问题。

  这样又会有密码泄漏的安全问题,那么我们能怎么做?在这种情况下,又有一个新的技术相应的诞生,叫CA(数字证书),那么通过数字证书,来让A知道,给我的这个公钥到底是谁的,有了这个数字证书以后,在提供给A的就不是公钥了,就是数字证书,如图所示:

  这样一来如果是C的公钥,没有数字证书,那么A就不会用C的公钥来加密自己的密码,但是,问题又来了,如果C通过数字证书来给B发送信息,那么B也会进行解析,这里的问题就是B怎么知道这个密码是A发的问题,那么密码学怎么解决这个问题呢?这里又有一个叫签名的技术,怎么做呢,就是A也要产生一对公钥和私钥,把A的公钥发给B(这里是数字证书),那么A通过B给的数字证书,来加密,在用A自己的私钥,在来加密(这里加密的是A通过B的数字证书加密后的摘要),在发送给B,如果B能用A的公钥解密,那么这个就是A的,这样就实现了数字签名,如图所示:

  这样是A知道B,B知道A,这样一来密码的安全性大大提高,不过,这没有完全的把密码问题解决,这个留给大家思考。总的来说,密码问题,无穷无尽,我们尽可能做的就是提高密码的安全指数。

----------------------------------------------------------华丽有带着无耻的分割线------------------------------------------------  

下面就是我们实际操做,配置Tomcat的https连接器。

  首先,我们创建一个数字证书,这里试用到一个命令keytool -genkey -alias tomcat -keyalg RSA (这是java语言里面自带的一个命令,genkey:密钥对,alias:别名,tomcat:服务器,RSA:算法),看图说话:

这个数字证书会存在这个系统的数字库里,所以你要输入密码,密钥库的密码

这里让你输入的名称,其实是在问你这个密钥库在那个网站使用这个数字证书,这部最重要,我们这里输入localhost,然后就下一步下一步,到结束,

这样我们就生成了一个数字证书。生成了一个数字证书在哪看呢?在这个C:Documents and Settingsyang路径下你会看到一个“.keystore”文件,注意,这个yang是我的用户名,用的时候对应到你自己的电脑。这样我们就有了一个数字证书,

然后我们来配置Tomcat,配置好了数字库,我们要用上

打开我们Tomcat的server.xml,找到这段话,

copy一下,但是这个怎么用我们不知道,这里叫大家一个方法,查文档,Tomcat的文档,启动Tomcat,打开Tomcat欢迎页,找到Tomcat Documentation选项,点击,在找Configuration,我们这里配置的是连接器,就找http,点击http,找到两个属性1.keystoreFile 2.keystorePass,keystoreFile 是密钥库的路径,一般的情况下我们把密钥库放在tomcat的conf文件夹里面,而keystorePass是密钥库的密码,那好,我们就修改一下server.xml的配置,修改后的如下

1 <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
2                maxThreads="150" scheme="https" secure="true"
3                clientAuth="false" sslProtocol="TLS"   keystoreFile="conf/.keystore" keystorePass="******"/>

这步完成,那么恭喜你,我们的这个Tomcat的https连接器就完成了,

重启Tomcat,注意你Tomcat重启的时候如果报错,请检查你的Tomcat,如果老是重启报错,建议你下载一个全新的Tomcat,打开连接,注意,我们这里要连接的是Https//localhost:8443/,为什么要连接8443,为什么是Https,这就是一加密的方式与服务器进行交互,就不过多做解释,浏览器打开网页会出现这个问题:

报这个错很正常,我们的数字证书CA没有验证,CA不担保我们的证书,那我们就强制的信任,点击"继续浏览网页(不推荐)",他不推荐没有事,我们自己写的东西我们在弄不了,那不完了,继续,

点击证书错误,查看并且安装我们的证书,安装成功后,重新打开一个浏览器,浏览器上面会有一个锁的图标,证明我们成功,并且可以访问,这个就可与服务器以加密的方式进行访问了,这就完成了。

测试成功,然后清除证书,工具-->内容-->证书  点击守信认证书,删除叫localhost的证书,OK,搞定。

要注意,我们这里配置的是单项的加密,不是双向的。

注意测试完成不要忘了安装在你电脑上的东西都清除掉,一定要都清除掉。防止下次你作别的东西出问题,而且找不到问题的所在,切记。

如果有使用请标明来源:http://www.cnblogs.com/duwenlei/
原文地址:https://www.cnblogs.com/duwenlei/p/3476591.html