首页 > 其他分享 >https请求ssl认证失败

https请求ssl认证失败

时间:2023-04-07 09:44:50浏览次数:45  
标签:版本 openssl 认证 ssl https 6.0 dotnet 镜像 sdk

问题描述:程序需使用第三方进行开票,第三方服务提供https的post请求接口,并提供基于pfx证书的安全认证。原始服务基于.netcore3.1,dockerfile基础镜像是mcr.microsoft.com/dotnet/core/aspnet:3.1-bionic,版本迭代时进行了sdk升级为.net6,基础镜像是mcr.microsoft.com/dotnet/aspnet:6.0,结果开票服务请求认证失败,错误日志是:

The SSL connection could not be established, see inner exception.,Authentication failed,at System.Net.Http.ConnectHelper.EstablishSslConnectionAsync。

1、 第三方服务器可以正常连接并开票(生产环境一切正常),怀疑是sdk升级导致代码不兼容。

 因ssl证书是双向认证的,服务器端认证正常,客户端就绕过认证尝试,在HttpClientHandler加入如下代码:(问题仍然存在)

  

 2、 测试openssl是否正常安装

   Openssl version

 3、 利用curl测试https请求证书是否正常

生成个人证书的公钥和私钥:

openssl pkcs12 -clcerts -nokeys -in cert.pfx -out client.pem    #客户端个人证书的公钥  

openssl pkcs12 -nocerts -nodes -in cert.pfx -out key.pem #客户端个人证书的私钥

 1) 测试https:

 curl -k --cert client.pem --key key.pem https://******/fpt-dsqz/invoice

报错误是:key too small

 2) 为了验证生成的key没有问题,重新部署一个与生产一样的服务版本,进入容器中验证证书:

  

  

  原先服务版本openssl版本较低,且ssl认证是通过的。

 由1)和2)对比,是openssl版本问题导致认证失败。

 在网上查了下原因,高版本的openssl要求证书key必须是2048位了,否则认为key太短,证书不安全,导致认证失败。由于证书是第三方服务提供并用于接口请求验证,只能降低openssl的版本。

 1、 更改当前docker服务的openssl版本

卸载旧版本:1. apt-get purge openssl  2. rm -rf /etc/ssl #删除配置文件

安装新版本 apt-get install openssl=package号,发现不能安装2018版本。(测试镜像改成mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim,openssl版本为2019同样认证失败)

2、 下载openssl 2018版本的源代码进行编译。

网上的编译方法基本是:先./config,再make&&make install,结果总是编译失败,缺少各种文件~`(*>﹏<*)′

  由于openssl版本限制,那只能基于已有该版本系统mcr.microsoft.com/dotnet/core/aspnet:3.1-bionic镜像构造新的镜像,在该镜像中安装.net6.0的运行时,以此满足openssl的认证以及业务程序的.net6版本需求。

 1) 制作dockerfile

  (备注:RUN的脚本也是开票需要用到的)

2) 生成镜像,并基于镜像启动容器

docker build -t aspnet:base .

docker run -d -it --name aspnetbase aspnet:base /bin/bash   

进入容器中,安装.net6的运行时:apt-get install dotnet-sdk-6.0,报错如下:

报错:Unable to locate package dotnet-sdk-6.0

E: Couldn’t find any package by glob dotnet-sdk-6.0

E: Couldn’t find any package by regex dotnet-sdk-6.0

#解决方案:

wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb

sudo dpkg -i packages-microsoft-prod.deb

sudo apt-get update

apt search dotnet-sdk(查询所有可用的sdk)

整个sdk版本太大,只需要安装运行时即可apt-get install dotnet-runtime-6.0

3) 查看运行时的安装

进入根目标/usr/share/dotnet/shared,同时包含文件夹目录:Microsoft.AspNetCore.App和Microsoft.NETCore.App,目录下同时包含6.0.13的运行时,可把基础镜像带的3.1运行时删除

  备注:可不必在容器中安装.net6.0的运行时,从其它还有net6.0运行时的容器中拷贝这两个文件夹,并放入相同路径,一样有效(如基础镜像:mcr.microsoft.com/dotnet/aspnet:6.0 AS base)生成的容器。

4) 将当前容器保存为镜像,作为其它服务的基础镜像.

docker commit aspnetbase(容器id) alicelxq/dotnet-sdk:6.0

业务服务dockerfile以此作为基础镜像:

FROM alicelxq/dotnet-sdk:6.0 AS base

最终应用程序服务sdk升级net6.0,同时openssl支持低版本https的ssl认证。

 

标签:版本,openssl,认证,ssl,https,6.0,dotnet,镜像,sdk
From: https://www.cnblogs.com/zxsn2014/p/17282706.html

相关文章

  • SSL peer shut down incorrectly问题的解决
    问题描述前两天运行了一个其他类型的文件,然后今天再重新试着运行一下我的Android文件,就出现了这样一个错误,麻了啊家人们!问题解决找到Android项目中的GradleScripts,里面的gradle-wrapper.properties文件;里面的distributionURL属性,他并不支持HTTPs协议,需要将其改成http;更崩溃......
  • HTTPS双向认证【转】
    背景在三方接口对接中,偶尔会遇到需要传递证书的情况,这种方式其实是在SSL握手过程中会同时验证客户端和服务器的身份,这就是我们常说的 双向认证。双向认证需要服务器和客户端提供身份认证,只能是服务器允许的客户方能访问,安全性相对于要高一些。下面老黄用几个小例子来演示一下......
  • 成功解决requests 报错raise SSLError(e, request=request)_requests.exceptions.SSL
    问题描述在使用requests调用https接口时,会遇到ssl证书报错raiseSSLError(e,request=request)requests.exceptions.SSLError:HTTPSConnectionPool(host='v4.ketangpai.com',port=443):Maxretriesexceededwithurl:/UserApi/login(CausedbySSLError(SSLCertVerificat......
  • JWT 实现登录认证 + Token 自动续期方案
    要实现认证功能,很容易就会想到JWT或者session,但是两者有啥区别?各自的优缺点?应该Pick谁?夺命三连区别基于session和基于JWT的方式的主要区别就是用户的状态保存的位置,session是保存在服务端的,而JWT是保存在客户端的认证流程基于session的认证流程用户在浏览器中输入用户名和密码,服务......
  • HTTPS协议概述&HTTPS使用成本&HTTPS对性能的影响&HTTPS常见问题
    HTTPS协议概述 HTTPS可以认为是HTTP+TLSTLS是传输层加密协议,它的前身是SSL协议  HTTPS功能介绍内容加密1、非对称密匙交换2、对称内容加密身份认证1、数字证书数据完整性HTTPS使用成本证书费用以及更新维护HTTPS降低用户访问速度消耗CPU资源,需要增加大量......
  • TCP/IP和OSI的基础层级关系图,TCP/IP四层模型关系,TCP/IP和HTTP/HTTPS的关系图
    TCP/传输控制协议英文全称TransmissionControlProtocol。IP/网际互连协议英文全称InternetProtocol。tcp和ip是互联网众多通信协议中最为著名的。1.OSI参考模型与TCP/IP的关系计算机网络分层模型OSI七层模型TCP/IP四层模型TCP/IP五层模型应用层应用层应用层......
  • Redis 在身份认证中的应用
    1.Redis在Session共享问题中的应用传统Session-Cookeis身份认证方法中,一个Session只保存在一台服务器上,适合域单体应用。随着项目规模的增加,项目的架构也不断向微服务分布式集群演进,传统的Session-Cookie方式在集群环境下就不能很好的工作了,这时就产生了Session共......
  • django.db.utils.OperationalError: (2026, 'SSL connection error: unknown error nu
    写给自己的问题备忘录django.db.utils.OperationalError:(2026,'SSLconnectionerror:unknownerrornumber')执行:pythonmanage.pymigrate报错,如下。  明明上个项目还好好的,怎么换个就不行了,网上的答案各种各种。决定从自己配置找原因,对比发现,两个环境的 mysqlclie......
  • js dom className classList
    classListdom.classList.contains('black')//删除blackdom.classList.remove('black')//新增.reddom.classList.add('red')classNameletcName=elementNodeReference.className;elementNodeReference.className=cName;详情见官网......
  • 6·2HTTPS协议概述|6·32HTTPS使用成本|6·42HTTPS对性能的影响|6·52HTTPS常见问题
    HTTPS可以认为是HTTPS+TLSTLS是传输层加密协议,它的前身是SSL协议HTTPS功能介绍 内容加密 非对称密钥交换 对称内容加密 身份认证 数字证书 数据完整性 HTTPS使用成本 证书费用以及更新维护 HT......