版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java安全专题讲师:张孝祥Tip4:为Tomcat配置Https协议功能一些基本的安全知识Keytool工具的使用SSL/TLS的工作原理Tomcat的体系结构一些基本的安全知识对称加密与非对称加密对称加密称为密钥加密,速度快,但加密和解密的钥匙必须相同,只有通信双方才能知道钥匙非对称加密称为公钥加密,速度慢,加密和解密的钥匙不相同,某一个人持有私钥,任何人都可以知道公钥问题:想让任何陌生人都可以与你进行加密数据的交换,且加密速度要快,如何实现呢?数字摘要与MD5/SHA算法作用:数据的完整性校验数字签名功能:必须能够验证内容没有修改,必须能够验证内容确实是被发送方签署方案:发送方的公钥可以
2、验证发送方签名的真实性,数字摘要可以验证内容没有修改数字证书问题:如何确认对方提供的公钥的真实性。方案:每个人或机构的公钥和私钥由一些权威的机构产生!密钥加密密钥加密也称为对称加密,速度快,但加密和解密的钥匙必须相同,只有通信双方才能知道钥匙。基本步骤:得到keyGenerator的实例对象,并调用其generateKey()方法创建SecretKey对象。得到Cipher的实例对象,并调用其init()方法指定SecretKey对象和指定要进行加密、还是进行解密操作。调用Cipher对象的doFinal()方法完成加密或解密操作。扩展步骤:把密钥保存为密钥文件并传递给对方,用密钥文件对其他文
3、件加密后,再把加密的结果文件传递给对方,让对方用密钥文件解密。单独使用CipherInputStream或CipherOutputStream都可以完成加密和解密操作,关键在于传入的Cipher对象的操作模式。由于加密时所涉及的secretkey不好记忆和交换,可以使用SecretKeyFactory 将口令生成SecretKey。公钥加密公钥加密也称为非对称加密、速度慢、加密和解密的钥匙不相同,某一个人持有私钥,任何人都可以知道公钥。基本步骤:得到keyPairGenerator的实例对象,并调用其generateKeyPair()方法创建KeyPair对象。调用KeyPair对象的getP
4、rivate和getPublic方法,分别得到PrivateKey对象和PublicKey对象。得到Cipher的实例对象,并调用其init()方法指定PrivateKey对象或PublicKey对象,并指定要进行加密、还是进行解密操作。调用Cipher对象的doFinal()方法完成加密或解密操作。扩展步骤:把公钥和私钥分别保存为公钥文件和私钥文件,把公钥文件传递给对方,对方用公钥文件对其他文件加密后,再把加密的结果文件传递回来,这边再用私钥文件解密。单独使用CipherInputStream或CipherOutputStream都可以完成加密和解密操作,关键在于传入的Cipher对象的操作
5、模式。数字摘要的基本应用:数据的完整性校验MD5/SHA的应用消息摘要是一种算法:无论原始数据多长,消息摘要的结果都是固定长度的;原始数据任意bit位的变化,都会导致消息摘要的结果有很大的不同,且根据结果推算出原始数据的概率极低。消息摘要可以看作原始数据的指纹,指纹不同则原始数据不同。数字摘要与MD5/SHA算法通用处理方式:调用MessageDigest对象的update和digest方法流数据的特殊处理: 使用DigestInputStream或DigestOutputStream包装MessageDigest对象,调用DigestInputStream的read方法或DigestOutp
6、utStream的write方法读写完数据并将流关闭后,再调用MessageDigest对象的digest方法,流中的数据就全被摘要处理了。基于MAC(消息验证码)的数字摘要MAC,Message Authentication Code ,密钥被用作消息摘要生成过程的一部分。防止内容和摘要同时被篡改,在一定成都上起到了验证发送者身份。步骤: KeyGenerator.getInstanceKeyGeneraotr.generateKey Mac.getInstance Mac.init(secretyKey) Mac.update Mac.doFinal数字签名数字签名的基础是公钥和私钥的非对
7、称加密,发送者使用私钥加密消息摘要(签名),接收者使用公钥解密消息摘要以验证签名是否是某个人的。基本步骤:得到keyPairGenerator的实例对象,并调用其generateKeyPair()方法创建KeyPair对象。调用KeyPair对象的getPrivate和getPublic方法,分别得到PrivateKey对象和PublicKey对象。得到Signature的实例对象,调用其initSign()方法和指定PrivateKey对象,然后调用update方法和sign方法产生签名调用Signature对象的initVerify()方法和指定PublicKey对象,然后调用update
8、方法和verify()方法对原始数据的签名进行验证。扩展步骤:把公钥和私钥分别保存为公钥文件和私钥文件,把公钥文件传递给对方,用私钥文件对其他文件进行签名后,再把其他文件和签名的结果文件传递给对方,让对方用公钥文件进行签名验证。 keystore与keytool介绍KeyStore的介绍存储多个私钥和其附带的数字证书存储信任的第三方数字证书KeyStore中的每一个私钥和信任的第三方数字证书用一个alias进行标识Keytool的应用产生私钥与导入第三方证书导出证书与生成CSR(Certificate Signing Request)文件 修改KeyStore与其中存储项的密码打印KeySto
9、re与其中的存储项信息删除KeyStore中的存储项 数字证书的创建与查看按照默认方式创建证书默认创建的keystore文件为用户主目录下的.keystore。 默认的key和证书的alias为mykey。在默认存储位置创建指定alias名称的证书。在指定的存储位置创建指定alias名称的证书。显示keystore中的证书信息显示所有证书的条目列表:keytool list 显示某个证书的详细信息:keytool -list -v -alias zxx将数字证书导出为文件keytool -exportcert -alias zxx -file zxx.cer 生成可打印的证书:keytool
10、-exportcert -alias zxx -file zxx.cer rfc显示数字证书文件中的证书信息keytool -printcert -file zxx.cer 直接双击zxx.cer,用window系统的内置程序打开zxx.cer针对数字证书的编程在java程序中使用Certificate类来描述通用的数字证书,其子类X509Certificate则专用于描述X.509类别的数字证书,这两个类中最常用的方法如下:getPublicKey() getSignature() getNotBefore() getNotAfter() getSigAlgName() checkValid
11、ity(),只是验证证书的日期是否有效,不验证签发者的签名和权威性。verify(),用证书签发者的公钥去验证证书上的签名是否有效。直接根据证书文件获取Certificate对象的基本步骤:得到CertificateFactory的实例对象。调用CertificateFactory对象的generateCertificate()方法,并传入指向证书文件的InputStream流对象作为参数。将得到的Certificate对象强转为X509Certificate类型,或者调用其toString方法()。从keystore中提取Certificate对象的基本步骤:得到KeyStore对象。调用K
12、eyStore对象的load()方法,并传入指向密钥库文件的InputStream流对象和代表密码的字符数组。调用KeyStore对象的getCertificate ()方法,并传入要获取的证书的alias名称。将得到的Certificate对象强转为X509Certificate类型,或者调用其toString方法()。 keytool的其他应用删除指定alias名称的证书。修改keystore的密码。改变某个证书的alias名称。产生CSR(Certificate Signing Request)文件介绍如何通过证书链来确保证书的可靠性导入数字证书文件增加受信任的证书项 导入被CA签过名的
13、数字证书对于证书链,必须先导入CA的证书后,才能导入被签名的证书。针对keystore的编程KeyStore类中最常用的方法如下:aliases() store(),可用于修改整个keystore的口令 setKeyEntry(alias,privatekey,pass,chain),可用于修改原有key的密码 setCertificateEntry,用于保存trustedCertEntry containsAlias() deleteAlias() getCertificate()getCertificateChain()数字证书的签发与校验: 属简单了解的知识 SSL/TLS的工作原理IT
14、资讯交流网 WWW.IT315.ORGSSL编程默认参数方式服务器端程序调用getDefault()静态方法得到SSLServerSocketFactory实例对象需要通过.ssl.keyStore 和.ssl.keyStorePassword系统属性指定keystore的位置与密码,否则,KeyManager管理一个空的keystore,这可以通过在jsse文档中搜索getDefault关键字获知。 调用SSLServerSocketFactory对象的createServerSocket()方法得到ServerSocket。循环调用ServerSocket.accept()等待外部连接,并
15、启动新线程与每个连接的客户端进行对话。打开浏览器进行访问测试,必须在keystore中存入与主机名相一致的keyEntry,且将该keyEntry的证书安装到浏览器中。客户端编程:调用getDefault()静态方法得到SSLSocketFactory实例对象需要通过.ssl.trustStore系统属性指定truststore的位置,由于不需要读取私钥信息,所以不用设置keystore的密码。如果没有设置.ssl.trustStore系统属性,则查找/lib/security/jssecacerts,没找到则接着查找/lib/security/cacerts。 如果上面的默认的trustst
16、ore没有找到,则TrustManager管理一个空的trueststore,这可以通过在jsse文档中搜索getDefault关键字获知。调用SSLSocketFactory对象的createSocket()方法连接服务器,连接成功后与服务器进行对话。运行客户端程序进行测试访问,如果服务器出示的证书不是由客户端已经信任的CA签名的,则必须在truststore中导入服务器端的证书。SSL编程定制SSLContext服务器端程序调用getInstance()静态方法得到SSLContext实例对象调用SSLContext对象的init()方法进行初始化调用init()方法时必须传入KeyMan
17、ager数组, KeyManager数组通过KeyManagerFactory对象从keystore中去读取出来。 调用SSLContext对象的getServerSocketFactory()方法得到SSLServerSocketFactory实例对象,接着按照默认参数的例子编写后续代码。客户端编程:调用getInstance()静态方法得到SSLContext实例对象调用SSLContext对象的init()方法进行初始化调用init()方法时必须传入TrustManager数组, TrustManager数组通过TrustManagerFactory对象从truststore中去读取出来
18、。 调用SSLContext对象的getSocketFactory()方法得到SSLSocketFactory实例对象,接着按照默认参数的例子编写后续代码。扩展:让服务器端程序从keystore里的多个KeyEntry中选择一个:编写一个实现了X509KeyManager接口的自定义KeyManager类,这个自定义KeyManager类的chooseServerAlias方法返回要使用的keyEntry的别名, 而自定义KeyManager类中的其他方法则转发给原来通过KeyManagerFactory获得的KeyMananger对象。实验方式:在keystore中创建两个keyEntry,
19、先指定其中一个,然后再指定另外一个,这两个当中必然有一个会导致客户端出错。Https协议编程与TLS的区别传输的数据内容应遵守Http协议格式服务器出示的证书所有者的名称必须是URL地址中指定的主机名基本步骤:创建表示https协议路径的URL实例对象,并获得URLConnection对象。调用URLConnection对象的setDoOutput()方法支持发送实体内容。获得输出和输入流与服务器进行交互。扩展步骤:在程序中定制truststore的位置全局设置:使用.ssl.trustStore系统属性指定truststore的位置。针对单个链接的设置:使用SSLContext对象的init()方法加载TrustManagerFactory对象从truststore中读取出来的TrustManager对象,然后调用SSLContext对象的getSocketFactory()方法得到SSLSocketFactory实例对象,最后再调用Http
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论