您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > Java安全_黑马程序员训练营_张孝祥
—高级软件人才实作培训专家!北京传智播客教育安全专题讲师:张孝祥—高级软件人才实作培训专家!北京传智播客教育:为Tomcat配置Https协议功能一些基本的安全知识Keytool工具的使用SSL/TLS的工作原理Tomcat的体系结构—高级软件人才实作培训专家!北京传智播客教育一些基本的安全知识对称加密与非对称加密对称加密称为密钥加密,速度快,但加密和解密的钥匙必须相同,只有通信双方才能知道钥匙非对称加密称为公钥加密,速度慢,加密和解密的钥匙不相同,某一个人持有私钥,任何人都可以知道公钥问题:想让任何陌生人都可以与你进行加密数据的交换,且加密速度要快,如何实现呢?数字摘要与MD5/SHA算法作用:数据的完整性校验数字签名功能:必须能够验证内容没有修改,必须能够验证内容确实是被发送方签署方案:发送方的公钥可以验证发送方签名的真实性,数字摘要可以验证内容没有修改数字证书问题:如何确认对方提供的公钥的真实性。方案:每个人或机构的公钥和私钥由一些权威的机构产生!—高级软件人才实作培训专家!北京传智播客教育密钥加密密钥加密也称为对称加密,速度快,但加密和解密的钥匙必须相同,只有通信双方才能知道钥匙。基本步骤:•得到keyGenerator的实例对象,并调用其generateKey()方法创建SecretKey对象。•得到Cipher的实例对象,并调用其init()方法指定SecretKey对象和指定要进行加密、还是进行解密操作。•调用Cipher对象的doFinal()方法完成加密或解密操作。扩展步骤:•把密钥保存为密钥文件并传递给对方,用密钥文件对其他文件加密后,再把加密的结果文件传递给对方,让对方用密钥文件解密。•单独使用CipherInputStream或CipherOutputStream都可以完成加密和解密操作,关键在于传入的Cipher对象的操作模式。•由于加密时所涉及的secretkey不好记忆和交换,可以使用SecretKeyFactory将口令生成SecretKey。—高级软件人才实作培训专家!北京传智播客教育公钥加密公钥加密也称为非对称加密、速度慢、加密和解密的钥匙不相同,某一个人持有私钥,任何人都可以知道公钥。基本步骤:•得到keyPairGenerator的实例对象,并调用其generateKeyPair()方法创建KeyPair对象。•调用KeyPair对象的getPrivate和getPublic方法,分别得到PrivateKey对象和PublicKey对象。•得到Cipher的实例对象,并调用其init()方法指定PrivateKey对象或PublicKey对象,并指定要进行加密、还是进行解密操作。•调用Cipher对象的doFinal()方法完成加密或解密操作。扩展步骤:•把公钥和私钥分别保存为公钥文件和私钥文件,把公钥文件传递给对方,对方用公钥文件对其他文件加密后,再把加密的结果文件传递回来,这边再用私钥文件解密。•单独使用CipherInputStream或CipherOutputStream都可以完成加密和解密操作,关键在于传入的Cipher对象的操作模式。—高级软件人才实作培训专家!北京传智播客教育数字摘要的基本应用:数据的完整性校验—高级软件人才实作培训专家!北京传智播客教育的应用消息摘要是一种算法:无论原始数据多长,消息摘要的结果都是固定长度的;原始数据任意bit位的变化,都会导致消息摘要的结果有很大的不同,且根据结果推算出原始数据的概率极低。消息摘要可以看作原始数据的指纹,指纹不同则原始数据不同。数字摘要与MD5/SHA算法通用处理方式:调用MessageDigest对象的update和digest方法流数据的特殊处理:使用DigestInputStream或DigestOutputStream包装MessageDigest对象,调用DigestInputStream的read方法或DigestOutputStream的write方法读写完数据并将流关闭后,再调用MessageDigest对象的digest方法,流中的数据就全被摘要处理了。基于MAC(消息验证码)的数字摘要MAC,MessageAuthenticationCode,密钥被用作消息摘要生成过程的一部分。防止内容和摘要同时被篡改,在一定成都上起到了验证发送者身份。步骤:KeyGenerator.getInstanceKeyGeneraotr.generateKeyMac.getInstanceMac.init(secretyKey)Mac.updateMac.doFinal—高级软件人才实作培训专家!北京传智播客教育数字签名数字签名的基础是公钥和私钥的非对称加密,发送者使用私钥加密消息摘要(签名),接收者使用公钥解密消息摘要以验证签名是否是某个人的。基本步骤:•得到keyPairGenerator的实例对象,并调用其generateKeyPair()方法创建KeyPair对象。•调用KeyPair对象的getPrivate和getPublic方法,分别得到PrivateKey对象和PublicKey对象。•得到Signature的实例对象,调用其initSign()方法和指定PrivateKey对象,然后调用update方法和sign方法产生签名•调用Signature对象的initVerify()方法和指定PublicKey对象,然后调用update方法和verify()方法对原始数据的签名进行验证。扩展步骤:•把公钥和私钥分别保存为公钥文件和私钥文件,把公钥文件传递给对方,用私钥文件对其他文件进行签名后,再把其他文件和签名的结果文件传递给对方,让对方用公钥文件进行签名验证。—高级软件人才实作培训专家!北京传智播客教育介绍KeyStore的介绍存储多个私钥和其附带的数字证书存储信任的第三方数字证书KeyStore中的每一个私钥和信任的第三方数字证书用一个alias进行标识Keytool的应用产生私钥与导入第三方证书导出证书与生成CSR(CertificateSigningRequest)文件修改KeyStore与其中存储项的密码打印KeyStore与其中的存储项信息删除KeyStore中的存储项—高级软件人才实作培训专家!北京传智播客教育数字证书的创建与查看按照默认方式创建证书•默认创建的keystore文件为用户主目录下的.keystore。•默认的key和证书的alias为mykey。在默认存储位置创建指定alias名称的证书。在指定的存储位置创建指定alias名称的证书。显示keystore中的证书信息•显示所有证书的条目列表:keytool–list•显示某个证书的详细信息:keytool-list-v-aliaszxx将数字证书导出为文件•keytool-exportcert-aliaszxx-filezxx.cer•生成可打印的证书:keytool-exportcert-aliaszxx-filezxx.cer–rfc显示数字证书文件中的证书信息•keytool-printcert-filezxx.cer•直接双击zxx.cer,用window系统的内置程序打开zxx.cer—高级软件人才实作培训专家!北京传智播客教育针对数字证书的编程在java程序中使用Certificate类来描述通用的数字证书,其子类X509Certificate则专用于描述X.509类别的数字证书,这两个类中最常用的方法如下:•getPublicKey()•getSignature()•getNotBefore()•getNotAfter()•getSigAlgName()•checkValidity(),只是验证证书的日期是否有效,不验证签发者的签名和权威性。•verify(),用证书签发者的公钥去验证证书上的签名是否有效。直接根据证书文件获取Certificate对象的基本步骤:•得到CertificateFactory的实例对象。•调用CertificateFactory对象的generateCertificate()方法,并传入指向证书文件的InputStream流对象作为参数。•将得到的Certificate对象强转为X509Certificate类型,或者调用其toString方法()。从keystore中提取Certificate对象的基本步骤:•得到KeyStore对象。•调用KeyStore对象的load()方法,并传入指向密钥库文件的InputStream流对象和代表密码的字符数组。•调用KeyStore对象的getCertificate()方法,并传入要获取的证书的alias名称。•将得到的Certificate对象强转为X509Certificate类型,或者调用其toString方法()。—高级软件人才实作培训专家!北京传智播客教育的其他应用删除指定alias名称的证书。修改keystore的密码。改变某个证书的alias名称。产生CSR(CertificateSigningRequest)文件•介绍如何通过证书链来确保证书的可靠性导入数字证书文件•增加受信任的证书项•导入被CA签过名的数字证书对于证书链,必须先导入CA的证书后,才能导入被签名的证书。—高级软件人才实作培训专家!北京传智播客教育的编程KeyStore类中最常用的方法如下:•aliases()•store(),可用于修改整个keystore的口令•setKeyEntry(alias,privatekey,pass,chain),可用于修改原有key的密码•setCertificateEntry,用于保存trustedCertEntry•containsAlias()•deleteAlias()•getCertificate()•getCertificateChain()数字证书的签发与校验:•属简单了解的知识—高级软件人才实作培训专家!北京传智播客教育的工作原理基本概念SSL(SecureSocketLayer)是netscape公司设计的主要用于web的安全传输协议。这种协议在WEB上获得了广泛的应用。IETF()将SSL作了标准化,即RFC2246,并将其称为TLS(TransportLayerSecurity),从技术上讲,TLS1.0与SSL3.0的差别非常微小。基本原理:先非对称加密传递对称加密所要用的钥匙,然后双方用该钥匙对称加密和解米往来的数据。工作过程浏览器向服务器发出请求,询问对方支持的对称加密算法和非对称加密算法;服务器回应自己支持的算法。浏览器选择双方都支持的加密算法,并请求服务器出示自己的证书;服务器回应自己的证书。浏览器随机产生一个用于本次会话的对称加密的钥匙,并使用服务器证书中附带的公钥对该钥匙进行加密后传递给服务器;服务器为本次会话保持该对称加密的钥匙。第三方不知道服务器的私钥,即使截获了数据也无法解密。非对称加密让任何浏览器都可以与服务器进行加密会话。浏览器使用对称加密的钥匙对请求消息加密后传送给服务器,服务器使用该对称加密的钥匙进行解密;服务器使用对称加密的钥匙对响应消息加密后传送给浏览器,浏览器使用该对称加密的钥匙进行解密。第三方不知道对称加密的钥匙,即使截获了数据
本文标题:Java安全_黑马程序员训练营_张孝祥
链接地址:https://www.777doc.com/doc-1249761 .html