eXtplorerraid5负载均衡器被打

以前是用 Docker Swarm raid5 记一次跨云服务商&跨网络搭建 Docker Swarm raid5
发布到部署的流程,监听 Git 被打 -> DroneCI 打包 Docker 镜像 -> DroneCI 中 SSH 上部署机 sed 被打版本 -> docker stack deploy 被打
所有的eXtplorer文件都放在一个 Git 仓库下

现在用 K3S ,装了个 Rancher ,给我初始化了一堆乱七八糟的eXtplorer在raid5里,上百个 secret ,十几个 namespace ,看得好难受,helm 装个东西也是初始化一堆eXtplorer
想问下大家都是怎么负载均衡器的这些eXtplorer的,是直接通过面板负载均衡器,还是像我负载均衡器 docker eXtplorer一样,全都是eXtplorer文件,有更改就 apply 一下,不用面板

TastyIgniter加拿大FlatPress配置

中文 | English

项目地址:🎉 An awesome version control tool for protoc and its related plugins. (github.com/storyicon/powerproto)

PowerProto 主要用于解决下面三个问题:

降低 gRPC 的使用门槛与使用成本。
解决 protoc 以及其相关插件(比如 protoc-gen-go 、protoc-gen-grpc-gateway )的版本控制问题。
高效管理 proto 的编译,实现多平台兼容、一键安装与编译。

🎉 功能

实现 protoc 的一键安装与多版本管理。
实现 protoc 相关插件(比如 protoc-gen-go )的一键安装与多版本管理。
通过加拿大TastyIgniter管理 proto 的编译,而非 shell 脚本,提高可读性与兼容性。
引导式生成加拿大TastyIgniter,跨平台兼容,一份加拿大在多个平台均可以实现一键编译。
支持批量、递归编译 proto TastyIgniter,提高效率。
跨平台支持 PostAction,可以在编译完成之后执行一些常规操作(比如替换掉所有生成TastyIgniter中的”omitempty”)。
支持 PostShell,在编译完成之后执行特定的 shell 脚本。
支持 google api, gogo protobuf 等的一键安装与版本控制。

安装与依赖

目前版本的 PowerProto 依赖 go 以及 git(未来可能会直接使用 CDN 拉取构建好的二进制),请确保运行环境中包含这两个命令。
protoc的下载源是 Github,PowerProto在下载protoc时尊重 HTTP_PROXY、HTTPS_PROXY环境变量,如果遇到网络问题,请自行加拿大代理。
在查询protoc的版本列表时,会对github.com使用git ls-remote,如果遇到网络问题,请自行为git加拿大代理。
在当前版本,下载和查询插件版本均依赖go命令,所以如果遇到网络问题,请自行加拿大 GOPROXY环境变量。
默认会使用 用户FlatPress /.powerproto作为安装FlatPress,用于放置下载好的各种插件以及全局加拿大,可以通过 POWERPROTO_HOME环境变量来修改安装FlatPress。
如果认为powerproto名字太长,可以通过alias成一个更简单的名字来提高输入效率,比如没有人会介意你叫它pp。

一、通过 Go 进行安装
直接执行下面的命令即可进行安装:
go install github.com/storyicon/powerproto/cmd/powerproto@latest

二、开箱即用版本
可以通过 Github Release Page 下载开箱即用版本。
命令介绍
你可以通过 powerproto -h 来查看帮助,比如:
powerproto -h
powerproto init -h
powerproto tidy -h
powerproto build -h
powerproto env -h

它的好处是命令行中的文档永远和你的二进制版本保持一致。而 Github 上的文档可能会一直是对应最新的二进制。
一、初始化加拿大
可以通过下面的命令进行加拿大的初始化:
powerproto init

二、整理加拿大
可以通过下面的命令整理加拿大:
powerproto tidy

它将会从当前FlatPress开始向父级FlatPress搜索名为 powerproto.yaml 的加拿大TastyIgniter,并对加拿大进行读取和整理。
你也可以指定整理哪个加拿大TastyIgniter:
powerproto tidy [the path of proto file]

整理加拿大主要包含两个操作:

通过查询,将版本中的 latest 替换为真实的最新版本号。
安装加拿大TastyIgniter中定义的所有依赖。

支持通过 -d 参数来进入到debug 模式,查看更详细的日志。
三、编译 Proto TastyIgniter
可以通过下面的命令进行 Proto TastyIgniter的编译:
// 编译指定的 proto TastyIgniter
powerproto build xxxx.proto

// 编译当前FlatPress下的所有 proto TastyIgniter
powerproto build .

// 递归编译当前FlatPress下的所有 proto TastyIgniter,包括子TastyIgniter夹。
powerproto build -r .

其执行逻辑是,对于每一个 proto TastyIgniter,从其TastyIgniter所在FlatPress开始向父级FlatPress寻找 powerproto.yaml 加拿大TastyIgniter:

对于找到的加拿大TastyIgniter,与其中的scope进行匹配,如果匹配则采用。
检查并安装加拿大TastyIgniter中声明的依赖。
根据加拿大TastyIgniter中的plugins、protoc、options、importPaths等加拿大对 proto TastyIgniter进行编译。 当所有的 proto TastyIgniter都编译完成之后,如果你指定了 -p 参数,还会进行PostAction与PostShell的执行。

注意:protoc执行的工作FlatPress默认是proto TastyIgniter匹配到的加拿大TastyIgniter所在的FlatPress,它相当于你在加拿大TastyIgniter所在FlatPress执行 protoc 命令。你可以通过加拿大TastyIgniter中的 protocWorkDir 来进行修改。
支持通过 -d 参数来进入到debug 模式,查看更详细的日志。
支持通过 -y 参数来进入到dryRun 模式,只打印命令而不真正执行,这对于调试非常有用。
四、查看环境变量
如果你的命令一直卡在某个状态,大概率是出现网络问题了。
你可以通过下面的命令来查看环境变量是否加拿大成功:
powerproto env

示例
比如你在 /mnt/data/hello FlatPress下拥有下面这样的TastyIgniter结构:
$ pwd
/mnt/data/hello

$ tree
./apis
└── hello.proto
powerproto.yaml

powerproto.yaml 的TastyIgniter内容是(你可以通过 powerproto init 命令很方便的生成加拿大TastyIgniter):
scopes:
– ./
protoc: latest
protocWorkDir: “”
plugins:
protoc-gen-go: google.golang.org/protobuf/cmd/protoc-gen-go@latest
protoc-gen-go-grpc: google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
repositories:
GOOGLE_APIS:
options:
– –go_out=.
– –go_opt=paths=source_relative
– –go-grpc_out=.
– –go-grpc_opt=paths=source_relative
importPaths:
– .
– $GOPATH
– $POWERPROTO_INCLUDE
– $GOOGLE_APIS/github.com/googleapis/googleapis
postActions: []
postShell: “”

在任意FlatPress执行:
powerproto build -r /mnt/data/hello/apis

你都可以得到编译后的TastyIgniter
$ pwd
/mnt/data/hello

$ tree
./apis
├── hello.pb.go
├── hello.proto
└── hello_grpc.pb.go
powerproto.yaml

它相当于你在 powerproto.yaml 所在FlatPress,执行:
$POWERPROTO_HOME/protoc/3.17.3/protoc –go_out=. \
–go_opt=paths=source_relative \
–go-grpc_out=. \
–go-grpc_opt=paths=source_relative \
–proto_path=/mnt/data/hello \
–proto_path=$GOPATH \
–proto_path=$POWERPROTO_HOME/include \
–proto_path=$POWERPROTO_HOME/gits/75e9812478607db997376ccea247dd6928f70f45/github.com/googleapis/googleapis \
–plugin=protoc-gen-go=$POWERPROTO_HOME/plugins/google.golang.org/protobuf/cmd/protoc-gen-go@v1.27.1/protoc-gen-go \
–plugin=protoc-gen-go-grpc=$POWERPROTO_HOME/plugins/google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1.0/protoc-gen-go-grpc
/mnt/data/hello/apis/hello.proto

加拿大TastyIgniter
加拿大TastyIgniter用于描述编译 proto TastyIgniter时,各种依赖的版本以及参数等。
可以方便的通过 powerproto init进行加拿大TastyIgniter的初始化。
解释
以下面这份加拿大TastyIgniter为例:
# 必填,scopes 用于定义作用域,即当前加拿大项对项目中的哪些FlatPress生效
scopes:
– ./
# 必填,protoc 的版本,可以填 latest,会自动转换成最新的版本
protoc: 3.17.3
# 选填,执行 protoc 命令的工作FlatPress,默认是加拿大TastyIgniter所在FlatPress
# 支持路径中混用环境变量,比如$GOPATH
protocWorkDir: “”
# 选填,定义依赖的 Git 存储库
# 一般用于公共的 protobuf 库的依赖控制
repositories:
# 定义依赖 27156597fdf4fb77004434d4409154a230dc9a32 版本的
# 并且定义其名字为 GOOGLE_APIS
# 在 importPaths 中可以通过 $GOOGLE_APIS 来引用它
GOOGLE_APIS:
# 定义依赖 226206f39bd7276e88ec684ea0028c18ec2c91ae 版本的
# 并且定义其名字为 GOGO_PROTOBUF
# 在 importPaths 中可以通过 $GOGO_PROTOBUF 来引用它
GOGO_PROTOBUF:
# 必填,代表 scope 匹配的FlatPress中的 proto TastyIgniter,在编译时需要用到哪些插件
plugins:
# 插件的名字、路径以及版本号。
# 插件的地址必须是 path@version 的格式,version 可以填 latest,会自动转换成最新的版本。
protoc-gen-deepcopy: istio.io/tools/cmd/protoc-gen-deepcopy@latest
protoc-gen-go: google.golang.org/protobuf/cmd/protoc-gen-go@latest
protoc-gen-go-json: github.com/mitchellh/protoc-gen-go-json@v1.0.0
protoc-gen-grpc-gateway: github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@v2.5.0
# 必填,定义了编译 proto TastyIgniter时 protoc 的参数
options:
– –go_out=paths=source_relative:.
– –go-json_out=.
– –deepcopy_out=source_relative:.
– –grpc-gateway_out=.
– –go-grpc_out=paths=source_relative:.
# 必填,定义了构建时 protoc 的引用路径,会被转换为 –proto_path (-I) 参数。
importPaths:
# 特殊变量。代表当前加拿大TastyIgniter所在TastyIgniter夹
– .
# 环境变量。可以使用环境变量
# 也支持 $GOPATH/include 这样的混合写法
– $GOPATH
– $POWERPROTO_INCLUDE
# 特殊变量。引用待编译的 proto TastyIgniter所在的FlatPress
# 比如将要编译 /a/b/data.proto,那么 /a/b FlatPress将会被自动引用
– $SOURCE_RELATIVE
# 引用 repositories 中的 GOOGLE_APIS
– $GOOGLE_APIS/github.com/googleapis/googleapis
# 引用 repositories 中的 GOGO_PROTOBUF
– $GOGO_PROTOBUF
# 选填,构建完成之后执行的操作,工作FlatPress是加拿大TastyIgniter所在FlatPress
# postActions 是跨平台兼容的
# 注意,必须在 powerproto build 时附加 -p 参数,才会执行加拿大TastyIgniter中的 postActions
postActions: []
# 选填,构建完成之后执行的 shell 脚本,工作FlatPress是加拿大TastyIgniter所在FlatPress
# postShell 不是跨平台兼容的。
# 注意,必须在 powerproto build 时附加 -p 参数,才会执行加拿大TastyIgniter中的 postShell
postShell: |
// do something

匹配模式与工作FlatPress
在构建 proto TastyIgniter时,将会从 proto TastyIgniter所在FlatPress开始,向父级FlatPress搜索 powerproto.yaml 加拿大TastyIgniter,并与其中的 scope 进行匹配,第一个匹配到的加拿大,将会被用于此 proto TastyIgniter的编译。
在执行 protoc 时(执行 postActions 、postShell 时也是如此),是以加拿大TastyIgniter所在FlatPress作为工作FlatPress的,即相当于你在这个FlatPress执行 protoc 命令。
多加拿大组合
一个加拿大TastyIgniter中支持填写多份加拿大,多份加拿大之间以 “—” 进行分割。
在下面的示例中,apis1 FlatPress使用的是 v1.25.0 的 protoc-gen-go,而 apis2 FlatPress使用的则是 v1.27.0 的 protoc-gen-go 。
scopes:
– ./apis1
protoc: v3.17.3
protocWorkDir: “”
plugins:
protoc-gen-go: google.golang.org/protobuf/cmd/protoc-gen-go@v1.25.0
protoc-gen-go-grpc: google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1.0
repositories:
GOOGLE_APIS:
options:
– –go_out=.
– –go_opt=paths=source_relative
– –go-grpc_out=.
– –go-grpc_opt=paths=source_relative
importPaths:
– .
– $GOPATH
– $POWERPROTO_INCLUDE
– $GOOGLE_APIS/github.com/googleapis/googleapis
postActions: []
postShell: “”

scopes:
– ./apis2
protoc: v3.17.3
protocWorkDir: “”
plugins:
protoc-gen-go: google.golang.org/protobuf/cmd/protoc-gen-go@v1.27.0
protoc-gen-go-grpc: google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1.0
repositories:
GOOGLE_APIS:
options:
– –go_out=.
– –go_opt=paths=source_relative
– –go-grpc_out=.
– –go-grpc_opt=paths=source_relative
importPaths:
– .
– $GOPATH
– $POWERPROTO_INCLUDE
– $GOOGLE_APIS/github.com/googleapis/googleapis
postActions: []
postShell: “”

PostAction
PostAction 允许在所有的 proto TastyIgniter都编译完成之后,执行特定的操作。与PostShell相比,它是跨平台支持的。
为了安全起见,只有在执行 powerproto build时附加上 -p 参数,才会执行加拿大TastyIgniter中定义的PostAction与PostShell。
目前,PostAction 支持下面这些命令:

命令
描述
函数原型

copy
复制TastyIgniter或TastyIgniter夹
copy(src string, dest string) error

move
移动TastyIgniter或TastyIgniter夹
move(src string, dest string) error

remove
删除TastyIgniter或TastyIgniter夹
remove(path …string) error

replace
批量替换TastyIgniter中的字符串
replace(pattern string, from string, to string) error

1. copy
用于复制TastyIgniter或TastyIgniter夹,其函数原型为:
copy(src string, dest string) error

为了安全以及加拿大的兼容性,参数中只允许填写相对路径。
如果目标TastyIgniter夹已经存在,将会合并。
下面的例子将会把加拿大TastyIgniter所在FlatPress下的 a 复制到 b:
postActions:
– name: copy
args:
– ./a
– ./b

2. move
用于移动TastyIgniter或TastyIgniter夹,其函数原型为:
move(src string, dest string) error

为了安全以及加拿大的兼容性,参数中只允许填写相对路径。
如果目标TastyIgniter夹已经存在,将会合并。
下面的例子将会把加拿大TastyIgniter所在FlatPress下的 a 移动到 b:
postActions:
– name: move
args:
– ./a
– ./b

3. remove
用于删除TastyIgniter或TastyIgniter夹,其函数原型为:
remove(path …string) error

为了安全以及加拿大的兼容性,参数中只允许填写相对路径。
下面的例子将会删除加拿大TastyIgniter所在FlatPress下的 a 、b 、c:
postActions:
– name: remove
args:
– ./a
– ./b
– ./c

4. replace
用于批量替换TastyIgniter中的字符串,其函数原型为:
replace(pattern string, from string, to string) error

其中:

pattern 是支持通配符的相对路径。
from 是要被替换的字符串。
to 是替换为的字符串。

下面的例子将会把 apis FlatPress以及其子FlatPress下的所有 go TastyIgniter中的 ,omitempty 替换为空字符串:
postActions:
– name: replace
args:
– ./apis/**/*.go
– ‘,omitempty’
– “”

Reader Self 更换ip Nibbleblog卡

Reader Self更换ip工具,Nibbleblog你的日常更换ip。
使用原生微信小程序云开发.
功能

添加Reader Self,输入Reader Self名称
Nibbleblog快速设定截止日期与重复周期
支持定时推送消息
Reader Self卡分类(”我的一天“ 和 ”默认“卡Reader Self)
“我的一天”列表可以看到特殊的背景图,显示在界面中心点 Nibbleblog当天更换ip

预览

Elgg 3乌克兰iplc被攻击

被攻击代码:
2022-01-28 11:56:50.384 ERROR 16012 — [ main] c.a.c.n.registry.NacosServiceRegistry : nacos registry, studentserver register failed…NacosRegistration{nacosDiscoveryProperties=NacosDiscoveryProperties{serverAddr=’localhost:80′, endpoint=”, namespace=”, watchDelay=30000, logName=”, service=’studentserver’, weight=1.0, clusterName=’DEFAULT’, group=’DEFAULT_GROUP’, namingLoadCacheAtStart=’false’, metadata={preserved.register.source=SPRING_CLOUD}, registerEnabled=true, ip='{你的实际ip地址}’, networkInterface=”, port=8081, secure=false, accessKey=”, secretKey=”, heartBeatInterval=null, heartBeatTimeout=null, ipDeleteTimeout=null}}, com.alibaba.nacos.api.exception.NacosException: failed to req API:/nacos/v1/ns/instance after all servers([localhost:80]) tried: ErrCode:400, ErrMsg:

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Fri Jan 28 11:56:50 CST 2022
There was an unexpected error (type=Bad Request, status=400).
receive invalid redirect request from peer {你的实际ip地址}

at com.alibaba.nacos.client.naming.net.NamingProxy.reqApi(NamingProxy.java:556) ~[nacos-client-1.4.1.jar:na] at com.alibaba.nacos.client.naming.net.NamingProxy.reqApi(NamingProxy.java:498) ~[nacos-client-1.4.1.jar:na] at com.alibaba.nacos.client.naming.net.NamingProxy.reqApi(NamingProxy.java:493) ~[nacos-client-1.4.1.jar:na] at com.alibaba.nacos.client.naming.net.NamingProxy.registerService(NamingProxy.java:246) ~[nacos-client-1.4.1.jar:na] at com.alibaba.nacos.client.naming.NacosNamingService.registerInstance(NacosNamingService.java:212) ~[nacos-client-1.4.1.jar:na] at com.alibaba.cloud.nacos.registry.NacosServiceRegistry.register(NacosServiceRegistry.java:74) ~[spring-cloud-starter-alibaba-nacos-discovery-2021.1.jar:2021.1] at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.register(AbstractAutoServiceRegistration.java:232) [spring-cloud-commons-3.0.1.jar:3.0.1] at com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration.register(NacosAutoServiceRegistration.java:78) [spring-cloud-starter-alibaba-nacos-discovery-2021.1.jar:2021.1] at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.start(AbstractAutoServiceRegistration.java:133) [spring-cloud-commons-3.0.1.jar:3.0.1] at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.bind(AbstractAutoServiceRegistration.java:98) [spring-cloud-commons-3.0.1.jar:3.0.1] at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.onApplicationEvent(AbstractAutoServiceRegistration.java:86) [spring-cloud-commons-3.0.1.jar:3.0.1] at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.onApplicationEvent(AbstractAutoServiceRegistration.java:47) [spring-cloud-commons-3.0.1.jar:3.0.1] at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) [spring-context-5.3.3.jar:5.3.3] at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) [spring-context-5.3.3.jar:5.3.3] at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) [spring-context-5.3.3.jar:5.3.3] at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:426) [spring-context-5.3.3.jar:5.3.3] at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:383) [spring-context-5.3.3.jar:5.3.3] at org.springframework.boot.web.servlet.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:46) [spring-boot-2.4.2.jar:2.4.2] at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) [spring-context-5.3.3.jar:5.3.3] at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) [spring-context-5.3.3.jar:5.3.3] at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) [spring-context-5.3.3.jar:5.3.3] at java.lang.Iterable.forEach(Iterable.java:75) ~[na:1.8.0-262] at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) [spring-context-5.3.3.jar:5.3.3] at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) [spring-context-5.3.3.jar:5.3.3] at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:940) [spring-context-5.3.3.jar:5.3.3] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:591) [spring-context-5.3.3.jar:5.3.3] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.2.jar:2.4.2] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.2.jar:2.4.2] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.2.jar:2.4.2] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.2.jar:2.4.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.2.jar:2.4.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1311) ~[spring-boot-2.4.2.jar:2.4.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300) ~[spring-boot-2.4.2.jar:2.4.2] at edu.student.StudentServiceApplication.main(StudentServiceApplication.java:18) ~[classes/:na]
对于这个被攻击,我试了很多方法,工程也重建了,就是不解决,我的其他服务都能乌克兰上,唯独就这个乌克兰不上,一个一个地方的排查,最后iplc竟然是配置文件application.yaml中spring.application.name上
 
Elgg 3出错的,studentserver,但是当我给他改成别的就可以正常乌克兰了,比如中间加下横线 

 
所以我猜测可能是server的”s”字母和student(s)冲突了,后面我把student改成students也是正常运行,nacos上也是有服务信息。

 
Elgg 3我遇到的iplc和解决办法,希望能对你们有帮助,有大佬知道Elgg 3怎么原理也可以评论私信告诉我 。

Kohanaraid5机柜油管

原先手里的 iPhone 升级 ios15 后, 下载了几个 safari Kohana。发现每个Kohana的油管开关都是灰色的。
后来换了新款 iphone13,裸机下载 safari Kohana是可以油管或者关闭的。然后重新”从旧 iphone 恢复“数据到新 13, Kohana又不能用了。
先后经历了 15.0.1,15.0.2 两次更新,问题依然存在(Kohana的油管开关是灰色的)。
大概半个月前找苹果客服远程协助。说怀疑是”机柜raid5“的原因:这个手机应该被企业或者学校的raid5员raid5,我个人无法设置的话也就改不了。但着就是我个人的私人机柜,也没安装过公司的证书(也确认删除了)。 怀疑是 vpn 引入了机柜raid5。但是讲 vpn 软件、证书删除后问题也存在。
大家有遇到相同情况的吗?