什么是https
是一种http的安全协议,在tcp ip网络模型里,http应用层是在tcp 传输层之上的,https协议规定了在tcp传输层之上还有一层tls/ssl层,这一层对http应用层发出去和接收的报文做加密和解密。
为什么需要https
出现https原因,在我看来有两点
1,因为http是明文传输,极不安全,需要对报文进行加密。
2,我们无法确认浏览的网站的身份信息,如果是钓鱼网站,诱使我们输入银行账号密码之类的就麻烦了。
简而言之,「https规定了 加密算法对报文进行加密,解决明文传输的问题。采用数字证书的方式解决对服务端的身份认证问题」。
加密报文方式
对称加密和非对称加密
对称加密是加密和解密都采用同一个密钥。 非对称加密 将密钥分为公钥和私钥, 公钥进行加密的报文,用私钥可以解密。私钥加密的报文,用公钥可以解密(这种加密方式也是数字证书采用的原理)
一般对称加密会比非对称加密性能高几个数量级。但是就安全性而言,非对称加密安全性会更高,那么https采用的是什么加密方式呢?
两者结合的加密方式
由于对称加密性能更好,所以https在真正加密报文时还是采用的对称加密方式,但是对称加密的密钥是通过非对称加密协商后传给对方的。这样的加密方式就能保证在性能更好的前提下也有不错的安全性。
使用了 对称加密和非对称加密了,那它是否就是安全的了呢
还不一定,此时如果请求被劫持,你的公钥给了第三方,第三方重新生成公钥,和私钥给了你的终端,此时还会有问题,所以为了解决这个问题,就有了“数字证书”。
数字证书原理以及应用
数字证书是什么
数字证书 是一个可信组织验证和签发的识别信息。有点类似于现实生活中的身份证,公安机关给我们颁发身份证为的就是证明个人身份,而在网络世界里,这个组织就是ca组织。
来看看向ca组织提交注册信息以及验证数字证书的过程。
使用 openssl验证 .crt 和 .key 是否匹配
要使用 OpenSSL 验证 .crt(证书文件)和 .key(私钥文件)的匹配性,你可以使用以下命令:
openssl x509 -noout -modulus -in certificate.crt | openssl md5
openssl rsa -noout -modulus -in private.key | openssl md5
这两个命令会分别提取证书和私钥文件的模数,然后计算其哈希值。如果这两个哈希值匹配,那么证书和私钥就是配对的。
这是一个非常基本的验证过程,它确保了证书和私钥在数学上是相互匹配的。但是,请注意,这并不检查证书和私钥的有效性、完整性或证书链的验证。要进行更严格的证书验证,你可能需要使用更复杂的工具或库,如 OpenSSL 库本身、OpenSSL 命令的其他选项,或者编程语言中的相应库。
使用 oepnssl 验证 pem 是否匹配
注意:这个是验证,证书里面公钥和私钥是否匹配,如果是纯公钥的.pem文件的话,请使用另一个方式
openssl rsa -pubin -in public_key.pem -noout -text | openssl rsa -check -noout -in private_key.pem
public_key.pem 纯公钥
private_key.pem 私钥
openssl 验证 .pem 的公钥和私钥
验证公钥,如果没有报错就证明是好的
openssl rsa -pubin -in public_key.pem -text -noout
验证私钥
openssl rsa -in private_key.pem -check
crt 转 pem证书 使用openssl (注意crt是证书文件,转换成pem也是证书文件,而不是纯的公钥文件)
openssl x509 -in ca.crt -out ca.pem -outform PEM
openssl rsa -in your_private_key.key -outform PEM -out private_key.pem
证书文件转纯公钥文件
把----BEGIN PUBLIC KEY---- 到 ----END PUBLIC KEY----的部分复制粘贴到一个新的.pem文件中,保存,然后用上面openssl验证.pem公钥的方法验证一下即可
pem证书 转 java Keystore(.jks)文件
1、在下述命令中,将your_alias替换为您想要为Keystore设置的别名,your_keystore.jks替换为您希望创建的Keystore文件的名称。
keytool -genkeypair -alias your_alias -keyalg RSA -keysize 2048 -keystore your_keystore.jks
2、将证书导入Keystore:
keytool -importcert -file your_certificate.pem -alias your_alias -keystore your_keystore.jks
确保将your_certificate.pem替换为您的.pem格式的证书文件名称,your_alias替换为Keystore中的别名,your_keystore.jks替换为您的Keystore文件名称。
3、验证证书
keytool -list -v -keystore your_keystore.jks
pem 转 tomcat.keystore
要将.pem格式的证书和私钥转换为Tomcat可用的tomcat.keystore文件,您需要执行一系列步骤来完成转换。这涉及到使用openssl工具来将.pem文件导入到Java keystore(.jks)文件中。下面是具体的步骤:
1、将.pem证书和私钥合并: 如果您的.pem文件中包含证书和私钥分别的部分,您需要将它们合并为一个.pem文件。在命令行中执行以下命令:
cat your_certificate.pem your_private_key.pem > combined.pem
2、将.pem文件转换为PKCS#12格式: 使用以下命令将.pem文件转换为PKCS#12格式(.p12文件),这是将证书和私钥导入Java keystore的一种方式:
openssl pkcs12 -export -in combined.pem -out certificate.p12 -name your_alias
your_alias替换为将在Keystore中使用的别名。
3、.p12文件转换为Java Keystore: 使用以下命令将.p12文件转换为Java keystore文件(.jks):
keytool -importkeystore -destkeystore tomcat.keystore -srckeystore certificate.p12 -srcstoretype PKCS12
这将会将.p12文件中的证书和私钥导入到tomcat.keystore文件中。
4、将 keystore 移动到 Tomcat 配置目录: 将生成的 tomcat.keystore 文件移动到 Tomcat 配置目录中。默认情况下,这个目录位于 Tomcat 安装目录下的 conf 文件夹。
5、在 Tomcat 配置文件中配置 HTTPS 连接: 打开 Tomcat 的 server.xml 配置文件,通常位于 Tomcat 配置目录的 conf 子目录中。找到以下部分:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="conf/tomcat.keystore" keystorePass="your_keystore_password"
clientAuth="false" sslProtocol="TLS" />
在上面的代码中,将 keystoreFile 设置为 tomcat.keystore 文件的路径,将 keystorePass 设置为您在生成 keystore 时设置的密码。
6、重启 Tomcat 服务器: 保存配置文件并重新启动 Tomcat 服务器。Tomcat 应该现在会使用您生成的 keystore 文件来配置安全的 HTTPS 连接。