songbb123

导航

.net core 3.1 下项目部署,关于小程序、电子证书、二维码、SSL证书的坑点解决

  项目背景:

基于公司项目业务需要,首先基于小程序进行开发,其中一个功能需要包含,电子证书的自动生成,还会包含动态二维码,由于.net core已经支持 linux 环境,所以会部署在 linux 环境下,本文章主要是为了记录一下,这种环境下需要的步骤,以免下次还有这种坑点会被踩到

  部署环境:

centos7,ssl,libgdiplus,宝塔,.net core 3.1

  遇到的坑点:

1、request:fail-202:net:ERR_CERT_AUTHORITY_INVALID

这种问题是由于证书导致的,小程序客户端无法识别域名证书引起的,

原因是宝塔配置证书的时候,pem没有拷贝完整,有的证书服务商会提供pem文件,但有的提供的是 _.xxxx.com_bundle.crt 这种文件,

虽然文件名不太一样,但是操作方式是一样的,都需要把文件的全部内容,拷贝到宝塔的 pem 文本框里,如下图,拷贝到红色圈主的框里;

xxx.com.key 文件则就把全部内容拷贝到 密钥(KEY)  框里就可以了

2、AggregateException请求地址 https://api.weixin.qq.com/sns/jscode2session?appid=xxxxxxx&secret=xxxxxxx&js_code=xxxxxx&grant_type=authorization_code 的异步任务取消:One or more errors occurred. (The SSL connection could not be established, see inner exception.)

由于我是用 IHttpClientFactory 注入的 HttpClient,请求的小程序接口,部署 centos7 后就出现了这种问题,在此引入 刘铁托的文章(https://www.cnblogs.com/liutietuo/p/12125725.html),使用他文章里的第二种方式,解决了这个问题,再次我把第二种方式内容放入进来

在发布后的目录中找到"你的项目.runtimeconfig.json"配置加入

"System.Net.Http.UseSocketsHttpHandler": false

3、"Unable to load DLL 'libgdiplus': The specified module could not be found. 或 The type initializer for 'Gdip' threw an exception

这种错误是由于在 Centos7 上,使用 System.Draw.Common类库时,报的错误,

yum install autoconf automake libtool
yum install freetype-devel fontconfig libXft-devel
yum install libjpeg-turbo-devel libpng-devel giflib-devel libtiff-devel libexif-devel
yum install glib2-devel cairo-devel
git clone https://github.com/mono/libgdiplus
cd libgdiplus
./autogen.sh --prefix=/usr
make
make install

创建符号链接:
ln -s /usr/local/lib/libgdiplus.so /usr/lib64/libgdiplus.so
ln -s /usr/local/lib/libgdiplus.so /usr/libgdiplus.so

如果还又报另外一个错误:Unable to load DLL 'libgdiplus',则需要安装另一个插件,

yum install libgdiplus-devel

4、还有一个问题,是二维码生成的,引入qrcoder的类库,能够在windows下生成没有问题,但是在centos7下生成就有问题了,如下图

 这种问题(中间的logo,牵涉公司品牌,被我打码了),后来实在确实没有解决掉,最后采用的方式,是再搭建了一个php二维码生成的站点,在此引入php二维码连接,然后放了一个接口,可以生成二维码,用站点调用 php二维码接口获取二维码,然后写入到证书图片中,大家如有解决方案,麻烦评论回复

 

 5、在此补充一个最新又遇到的一个问题:The handler does not support custom handling of certificates with this combination of libcurl (7.29.0) and its SSL backend (\\"NSS/3.44\\"). An SSL backend based on \\"OpenSSL/1.1.1b\\" is required. Consider using System.Net.Http.SocketsHttpHandler.

如果遇到这种问题,我也看了几篇文章,采用了其中一篇文章的方案(https://www.cnblogs.com/calvinK/p/8086046.html),但是按照操作步骤过程中,发现升级 curl 失败了,所以我只能依据他的思路,进行单独搜索升级 curl 和 openssl,这样就会很少有版本等其他问题了。

 

总结:由于一直在走微软的路线,对centos等一些跨平台了解的不是很深,所以会有一些学习点在等着我,对centos下部署有了更深入的了解。

linux 下用到什么,才会安装什么,减少资源损耗,节省系统性能。

posted on 2020-03-11 11:51  Jerome.Sung  阅读(387)  评论(0)    收藏  举报