如何将HTTP升级成HTTPS / 免费获取(FreeSSL、OHTTPS)SSL证书 / KeyManager中一直处于证书正在验证中无法成功获取证书 / 华为云配置CNAME类型的域名解析记录

#记一次HTTP到HTTPS的升级

一、http与https

1.http定义

http默认端口:80

​ HTTP 是一种超文本传输协议(Hypertext Transfer Protocol) 协议,它是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。

2.https定义

https默认端口:443

​ HTTPS 的全称是 Hypertext Transfer Protocol Secure。定义为:HTTPS 是一个在计算机世界里专门在两点之间安全的传输文字、图片、音频、视频等超文本数据的约定和规范。

​ ps个人理解:“S” for Secure or SSl(TSL)。

二、http与https的区别

1.事出有因,必然第一个问的是为什么。

HTTPS的内核是HTTP,HTTPS并不是一项新的应用层协议,只是将HTTP通信接口部分替换为 SSL 和 TLS 而已

HTTPS解决了http明文传输、无数据完整性校验、身份校验的三大问题

1)加密

HTTPS 通过混合加密算法,解决http明文传输的问题,避免窃听者对数据的监听。

2)数据一致性

HTTPS 基于摘要算法,保证数据在传输的过程中不会被第三方所修改,用户发送的数据会完整的传输到服务端

3)身份认证

HTTPS 基于数字证书和非对称加密算法,确认对方的真实身份,防止中间人攻击并建立用户信任。

2.什么是 SSL/TLS3

​ SSL 即安全套接字层,TLS(Transport Layer Security) 是 SSL(Secure Socket Layer) 的后续版本,它们是用于在互联网两台计算机之间用于身份验证和加密的一种独立的协议

3.SSL的混合加密原理

​ RSA 的运算速度非常慢,而 AES 的加密速度比较快,而 TLS 正是使用了这种混合加密方式。在通信刚开始的时候使用非对称算法,比如 RSA、ECDHE ,解决密钥交换的问题。然后用随机数产生对称算法使用的会话密钥(session key),再用公钥加密。对方拿到密文后用私钥解密,取出会话密钥。这样,双方就实现了对称密钥的安全交换。
在这里插入图片描述
(图源网络)

4.SSL的身份认证原理

基于非对称加密,使用私钥加密,公钥解密。私钥再加上摘要算法,就能够实现数字签名,从而实现认证。

​ 对于数字签名的认证问题。因为私钥是是自己的,公钥是谁都可以发布,所以必须发布经过认证的公钥,才能解决公钥的信任问题

​ 引入 CA,全称是 Certificate Authority,证书认证机构,你必须让 CA 颁布具有认证过的公钥,才能解决公钥的信任问题。这些机构颁布了 DV、OV、EV 三种证书,区别在于可信程度。DV 是最低的,只是域名级别的可信,EV 是最高的,经过了法律和审计的严格核查,可以证明网站拥有者的身份(在浏览器地址栏会显示出公司的名字)。不同的信任等级的机构一起形成了层级关系。

​ 通常情况下,数字证书的申请人将生成由私钥和公钥以及证书签名请求(CSR)组成的密钥对。(CSR是一个编码的文本文件,其中包含公钥和其他将包含在证书中的信息,如域名,组织,电子邮件地址等)。密钥对和 CSR生成通常在将要安装证书的服务器上完成,并且 CSR 中包含的信息类型取决于证书的验证级别。与公钥不同,申请人的私钥是安全的,永远不要向 CA(或其他任何人)展示。

​ 生成 CSR 后,申请人将其发送给 CA,CA 会验证其包含的信息是否正确,如果正确,则使用颁发的私钥对证书进行数字签名,然后将其发送给申请人。

(图源网络)

三、将HTTP升级成HTTPS

总的可以分为两个步骤一是获取SSL证书(免费/收费 | DV、OV、EV 三种证书);二是将证书部署在服务器上。

1.获取SSL证书——FreeSSL(免费/有效期一年)

FreeSSL网址:https://freessl.cn

1)注册后,进入首页

​ 输入需要升级的域名,然后在下方选择TRUSTsia品牌的双域名(有效期一年),再点击 “创建免费的SSL证书”

在这里插入图片描述

2)相关SSL证书配置

​ 在输入框中填写注册时的邮箱,然后证书类型选择RSA验证类型选择DNSCSR生成方式选择一键申请,最后点击 “点击创建”。

在这里插入图片描述

3)CSR生成

​ 根据弹出窗口,打开或者点击“KeyManager官网”下载KeyManager后点击“再次尝试启动KeyManager”。

​ 从网页进入到KeyManager软件(不要关闭当前网页)。在右侧,根据需要升级的域名,选择对应的服务商配置好该域名的AccessKeyId和AccessKeySecret。

在这里插入图片描述

​ 配置好后,勾选该域名服务商,点击“一键申请”。

4)获取证书

​ 成功后,在KeyManager的证书管理中,可以看到申请成功的证书记录。

在这里插入图片描述

​ 点击右侧操作栏的“更多”,选择“导出证书”。选择对应的服务器平台(以Tomcat)作为演示。勾选是否加密私钥,在下方输入加密私钥的密码,然后点击“导出”

​ 导出成功后可在到处时所选的文件夹中看到一个以域名命名的jks文件

在这里插入图片描述

​ 至此,获取SSL证书大功告成 :)

————————————————————————————————————

5)对一键生成中可能存在的一个问题进行记录:(BUG退!退!退!)

现象:KeyManager中一直处于“证书正在验证中”无法成功获取证书。

在这里插入图片描述

原因域名验证失败(猜测应该是FerrSSL自身的逻辑问题,按道理来说配置了AccessKeyId和AccessKeySecret即可获得DNS授权,应该不需要再进行DNS验证了)

解决办法:回到FreeSSL页面,点击右上角的“控制台”,在订单列表中找到对应的订单,在右侧操作栏中,点击更多操作,选择“订单详情”,可以看到需要配置CNAME类型的域名解析记录

在这里插入图片描述

根据自己域名的服务商,前往域名解析控制台,配置CNAME类型的域名解析记录。以华为云的域名为例:

​ 1.将订单详情中的CNAME主机记录,填入解析的“主机记录”中;

​ 2.在解析类型处,选择CNAME类型;

​ 3.将订单详情中的记录值,填入解析值处。

在这里插入图片描述
​ 添加解析记录完成后,回到FreeSSL控制台,手动点击状态栏处的”验证“,成功后即可获取证书。

在这里插入图片描述

2.获取SSL证书——OHTTPS(免费/有效期90天)

OHTTPS网址:https://ohttps.com

1)注册后,登入OHTTPS管理页面

​ 点击左侧菜单栏的“证书管理”,然后在证书管理页面内点击“创建证书”。

2)创建证书流程

①第一步:添加域名

​ 选择单域名(或者根据自己的需求选择),然后填写需要升级成HTTPS的域名,点击“下一步”。

在这里插入图片描述

②第二步:验证域名

推荐选择DNS授权模式。只需要配置AccessKeyId和AccessKeySecret。免DNS授权模式则是配置CNAME类型的域名解析记录的方式。配置好后,先点击“授权验证”,成功后点击“创建证书”。

在这里插入图片描述

③第三步:申请证书

​ 等待证书申请。

在这里插入图片描述

​ 成功后得到一个私钥文件和两个证书文件。

在这里插入图片描述

下载pem类型的文件:私钥文件certkey.pem和包含中间证书的证书文件fullchain.pem。也可以回到证书管理页面,点击右侧操作栏的“查看”,然后在更新记录中点击“查看证书文件”进行下载。

在这里插入图片描述

3)证书格式转换

在线转换网址:https://myssl.com/cert_convert.html
在这里插入图片描述

​ pem类型的证书无法部署到Tomcat服务器中,需要将私钥和证书一同进行格式转换,生成jks类型的证书文件。

​ 进入转换网页,原格式选择PEM,目标格式选择JKS,依次上传证书文件fullchain.pem和私钥文件certkey.pem。然后输入新文件密码,并确定新文件密码,用于加密私钥。
在这里插入图片描述

​ 点击提交后,成功获得用于部署Tomcat的JKS类型的SSL证书。

3.Tomcat上部署SSL证书

1)上传jks证书文件至服务器的omcat内

​ 在tomcat目录内新建文件夹“ssl”,并将jks文件上传至文件夹内。

在这里插入图片描述

2)修改tomcat的server.xml

​ 在Service标签下,新增一个Connector标签,配置监听https请求
在这里插入图片描述

	<Connector port="443" 
       protocol="HTTP/1.1"
      SSLEnabled="true"
      scheme="https"
      secure="true"
	  
      keystoreFile="jks文件地址/你的域名-freessl.jks"
      keystorePass="你设置的私钥密码"
      clientAuth="false"
	  
	  sslProtocol="TLS"
    />

3)修改web.xml将HTTP请求自动转换为HTTPS请求(可选)

​ 在xml尾部的welcome-file-list标签中,添加如下标签:

<!-- 安全配置 进行身份验证 --> 
<login-config>  
     
    <auth-method>CLIENT-CERT</auth-method>  
    <realm-name>Client Cert Users-only Area</realm-name>  
</login-config>  
<!-- 应用的安全约束 --> 
<security-constraint>  
    <web-resource-collection >  
        <web-resource-name>SSL</web-resource-name>
        <url-pattern>/*</url-pattern>  
    </web-resource-collection>  
    <user-data-constraint>  
       <!-- 定义了传输保障为CONFIDENTIAL,这意味着数据在传输时应该是加密的 --> 
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>  
    </user-data-constraint>  
</security-constraint>

4)重启Tomcat

​ 齐活~
在这里插入图片描述

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我无法提供完整的代码示例,因为集成SecOC到SOME/IP是一个复杂的过程,并需要根据具体的系统和安全需求进行定制开发。这涉及到修改SOME/IP协议栈、实现加密/解密功能、密钥管理等方面。 然而,我可以给你提供一个简单的示例来说明SecOC的基本概念和流程: ```c++ // 示例代码仅用于演示SecOC的基本概念,实际实现需要根据具体需求进行定制开发 // 密钥管理模块 class KeyManager { public: KeyManager() { // 初始化密钥 generateKeys(); } void generateKeys() { // 生成密钥对 // ... } std::string getPublicKey() { // 获取公钥 // ... return publicKey; } std::string signMessage(const std::string& message) { // 使用私钥对消息进行签名 // ... return signature; } }; // SOME/IP协议栈修改模块 class SomeIpStack { public: SomeIpStack() { // 初始化 // ... } void sendMessage(const std::string& message) { std::string signedMessage = signMessage(message); // 使用SecOC签名消息 // 发送签名后的消息 // ... } private: std::string signMessage(const std::string& message) { KeyManager keyManager; std::string signature = keyManager.signMessage(message); return message + signature; } }; int main() { SomeIpStack someIpStack; someIpStack.sendMessage("Hello, world!"); return 0; } ``` 请注意,这只是一个简单的示例,用于说明SecOC的基本概念。实际集成SecOC到SOME/IP需要更详细的设计和开发,包括修改协议栈、密钥管理、安全策略等方面。建议根据具体需求和环境进行详细的设计和开发工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值