.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) 收藏 举报



浙公网安备 33010602011771号