目录
- 1.简介 2. SSL及其工作方式 3.私钥 4.公开证书 5.根证书 6.证书颁发机构 7.证书链 8.使用Java keytool的密钥库 9.密钥库命令 10.在Apache Tomcat上使用密钥库和自签名证书配置SSL
1.简介
我们谁没有去ebay,亚马逊买东西或他的个人银行帐户来检查。 您是否认为这些站点足够安全,可以存储您的个人数据(信用卡号或银行帐号等)?
这些站点中的大多数都使用套接字层(SSL)协议来保护其Internet应用程序。 SSL允许在传输之前对来自客户端(例如Web浏览器)的数据进行加密,从而使试图嗅探数据的人无法对其进行解密。
许多Java应用程序服务器和Web服务器都支持将密钥库用于SSL配置。 如果要构建安全的Java程序,那么学习构建密钥库是第一步。
2. SSL及其工作方式
客户端始终使用HTTPS(而不是http://)开头的URL发起基于HTTP的SSL连接。 在SSL会话开始时,将执行SSL握手。 该握手产生会话的密码参数。 下图显示了如何处理SSL握手的简化概述。
简而言之,它是如何工作的:
- 浏览器请求一个安全页面(通常为https://)。
- Web服务器发送其公钥及其证书。
- 浏览器检查证书是否由受信任的方(通常是受信任的根CA)颁发,证书仍然有效,并且证书与联系的网站有关。
- 然后,浏览器使用公共密钥对随机对称加密密钥进行加密,并将其与所需的已加密URL以及其他已加密的http数据一起发送到服务器。
- Web服务器使用其私钥解密对称加密密钥,并使用对称密钥解密URL和http数据。
- Web服务器发回请求的html文档和使用对称密钥加密的http数据。
- 浏览器使用对称密钥解密http数据和html文档并显示信息。
SSL的世界实质上具有三种类型的证书:私钥,公钥(也称为公共证书或站点证书)和根证书。
3.私钥
私钥包含服务器的身份信息以及密钥值。 它应该保持此密钥的安全并受密码保护,因为它用于在握手期间协商哈希值。 有人可以使用它来解密流量并获取您的个人信息。 就像将房门钥匙留在门锁中一样。
4.公开证书
公共证书(公共密钥)是提供给客户的部分,就像您在机场出示护照时一样。 与私有密钥紧密相关的公共证书是使用证书签名请求(CSR)从私有密钥创建的。 创建私钥后,您将创建一个CSR,该CSR被发送到您的证书颁发机构(CA)。 CA返回签名的证书,其中包含有关服务器身份和CA的信息。
5.根证书
根CA证书是一个CA证书,它只是一个自签名证书。 该证书代表签发证书的实体,被称为证书颁发机构或CA,例如VeriSign,Thawte等。
6.证书颁发机构
可以为您签名证书的公司,例如VeriSign,Thawte,Commodo,GetTrust。 此外,许多公司和机构都通过自己从头开始构建完整的实现,或者使用开源选项(例如OpenSSL)充当自己的CA。
7.证书链
当服务器和客户端建立SSL连接时,会向客户端提供一个证书。 客户应确定是否信任此证书,此过程称为证书链。 客户端检查证书的颁发者,搜索其受信任根证书的列表,并将呈现的证书上的颁发者与受信任证书的主题进行比较。
如果找到匹配项,则连接继续。 如果不是,则Web浏览器可能会弹出一个对话框,警告您它不信任证书,并提供信任证书的选项。
8.使用Java keytool的密钥库
Java Keytool是密钥和证书管理实用程序。 它允许用户管理自己的公钥/私钥对和证书。 Java Keytool将密钥和证书存储在所谓的密钥库中 。 它使用密码保护私钥。
Java密钥库中的每个证书都与唯一的别名关联。 创建Java密钥库时,您将首先创建.jks文件,该文件最初仅包含私钥,然后生成CSR。 然后,您会将证书(包括所有根证书)导入密钥库。
9.密钥库命令
创建密钥库,密钥和证书请求
- 生成Java密钥库和密钥对
keytool -genkey -alias mydomain -keyalg RSA -keystore keystore.jks -storepass password
- 为现有的Java密钥库生成证书签名请求(CSR)
keytool -certreq -alias mydomain -keystore keystore.jks -storepass password -file mydomain.csr
- 生成密钥库和自签名证书
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360
进口证明书
- 将根或中间CA证书导入到现有的Java密钥库中
keytool -import -trustcacerts -alias root -file Thawte.crt -keystore keystore.jks -storepass password
- 将签名的主证书导入到现有的Java密钥库中
keytool -import -trustcacerts -alias mydomain -file mydomain.crt -keystore keystore.jks -storepass password
出口证明书
- 从密钥库导出证书
keytool -export -alias mydomain -file mydomain.crt -keystore keystore.jks -storepass password
检查/列出/查看证书
- 检查独立证书
keytool -printcert -v -file mydomain.crt
- 检查哪些证书在Java密钥库中
keytool -list -v -keystore keystore.jks -storepass password
- 使用别名检查特定的密钥库条目
keytool -list -v -keystore keystore.jks -storepass password -alias mydomain
删除证书
- 从Java Keytool密钥库中删除证书
keytool -delete -alias mydomain -keystore keystore.jks -storepass password
修改密码
- 更改Java密钥库密码
keytool -storepasswd -new new_storepass -keystore keystore.jks -storepass password
- 更改私钥密码
keytool -keypasswd -alias client -keypass old_password -new new_password -keystore client.jks -storepass password
10.在Apache Tomcat上使用密钥库和自签名证书配置SSL
- 使用此命令生成新的密钥库和自签名证书,将提示您输入特定信息,例如用户名,组织单位,公司和位置。
keytool -genkey -alias tomcat -keyalg RSA -keystore /home/ashraf/Desktop/JavaCodeGeek/keystore.jks -validity 360
- 您可以列出使用此命令刚创建的证书详细信息
keytool -list -keystore /home/ashraf/Desktop/JavaCodeGeek/keystore.jks
- 下载Tomcat 7
- 配置Tomcat的服务器以支持SSL或https连接。 在Tomcat \ conf \ server.xml中添加连接器元素
<Connector port="8443" maxThreads="150" scheme="https" secure="true" SSLEnabled="true" keystoreFile="/home/ashraf/Desktop/JavaCodeGeek/.keystore" keystorePass="password" clientAuth="false" keyAlias="tomcat" sslProtocol="TLS" />
- 启动Tomcat并转到https:// localhost:8443 / ,您将发现以下安全问题,浏览器将在其中显示不受信任的错误消息。 就电子商务而言,此类错误消息会导致对网站立即失去信心,并且组织可能会失去大多数消费者的信心和业务,这很正常,因为您的证书尚未由Thawte或Verisign等CA签署谁将验证请求者的身份并签发签名证书。
- 您仍然可以单击继续,直到您收到签名证书。
翻译自: https://www.javacodegeeks.com/2014/07/java-keystore-tutorial.html
- 从密钥库导出证书