该证书包含以下内容: (a) 证书序列号是17 (0x11); (b) 证书使用DSA和SHA-1哈希算法签名; (c) 证书发行者的名字是OU=nist; O=gov; C=US (d) 证书主体的名字是 8e 1b eb ec bf 1e 5a 3f 45 c0 bd 31 23 be 69 71 a7 c2 90 fe a5 d6 80 b5 24 dc 44 9c eb 4d f9 da f0 c8 e8 a2 4c 99 07 5c 8e 35 2b 7d 57 8d 0299 02 14 --02(Integer), 14(长度20) a7 83 9b f3 bd 2c 20 07 fc 4c e7 e8 9f f3 39 83 51 0d dc dd 0321 02 81 80 --02(Integer), 81(长度字段占一字节), 80(长度128) 0e 3b 46 31 8a 0a 59 2d f7 42 87 62 3f f1 b8 6f c7 3d 4b b8 8d 74 c4 ca 44 90 cf 67 db de 14 60 97 4a d1 f7 6d 9e 09 94
这种程序的使用场景,需要给客户一个证书,但不能把证书直接给他让他安装,程序中需要用到给客户的私钥,但又不允许客户将这个证书再去授权给其它人。 下边是代码 static void Main(string[] args) { Console.WriteLine("正在执行数字证书写入"); t.Start(); } catch { Console.WriteLine("数字证书写入失败
使用.net和x509证书实现安全 概述 主要针对目前xxx数据交换平台实现安全数据交换的设计方案;本方案通过PKI技术实现对报文加密,加签和证书的管理实现对数据交换安全的功能性需求. 证书管理控制台: 证书颁发机构(CA) 用于申请和颁发证书的应用服务。 证书生成工具(Makecert.exe)生成仅用于测试目的的 X.509 证书。 通过X.509证书实现密钥的交换和签名;用自己的证书(包含私钥)签名,用其他人证书(公钥)进行加密,验签的过程; 生成证书,该证书的用途可用于签名,也可用于解密(将证书的公钥导出到其他电脑后通过公钥加密 )生成证书的方式有两种 通过外部CA证书颁发机构申请证书 通过.net Makecert.exe工具通过命令行创建证书(这种方式才生的证书无法实现验证证书的合法性和可用性) 将获取到的证书导入到本地计算机的证书管理容器中如图 满足的前提条件 在证书管理器中存在解密用的服务器证书和验签用的客户端证书 接收到加密/加签的报文后首先抽取中间的证书信息(包含证书名称) 获取到证书名称后匹配本地计算中是会存在这本证书对于验证签名的证书统一存放在本地计算机
一个shell脚本,实现利用OpenSSL生成X509证书 #! you with to use DNSSEC/TLSA, add this in DNS zone (replace host with real hostname):" fpr=$( $openssl x509
重新生成证书 证书备份 cp -rp /etc/kubernetes /etc/kubernetes.bak 移除过期证书 rm -f /etc/kubernetes/pki/apiserver* rm * rm -rf /etc/kubernetes/pki/etcd/server.* rm -rf /etc/kubernetes/pki/etcd/peer.* 备注:可以使用命令openssl x509 -in [证书全路径] -noout -text查看证书详情 在当前路径下新建config.yaml kind: MasterConfiguration apiVersion: kubeadm.k8s.io conf /tmp/ kubeadm alpha phase kubeconfig all --config config.yaml 重启kubelet systemctl restart kubelet 证书过期时间确认 openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not ' 其他同理 集群确认 #覆盖配置文件 cp -
这个图片里面的箭头在Kubernetes内部,都是双向证书,下面的内容来源于我多年前的一篇文章,本次编写进行了略为修改。 CA证书 简单来说就是证书的颁发机构,也可以叫根证书。 路径 解释 年限 /etc/kubernetes/pki/etcd/ca.crt etcd根证书 默认10年 /etc/kubernetes/pki/ca.crt k8s集群根证书 默认10年 /etc /kubernetes/pki/front-proxy-ca.crt 代理访问k8s根证书(较少使用) 默认10年 普通证书 就是由CA证书颁发的普通证书,直接应用于业务的,他也有有效期的,比如10年 etcd证书 ca.crt作为etcd的根证书,签发etcd对外提供服务的server证书和签发etcd节点之间同步使用的peer证书,kubelet向etcd发起健康检查的证书。 livenessProbe: failureThreshold: 8 httpGet: host: 127.0.0.1 path: /health
证书续期提示 当执行kubectl get nodes等提示 Unable to connect to the server: x509: certificate has expired or is not yet valid 既为k8s的证书到期的提示 使用kubeadm安装k8s时,默认生成的client certificate的有效期是1年。 续期 master节点:xxx.xxx.xxx.xxx 检查证书有效期 kubeadm alpha certs check-expiration 或 openssl x509 -in /etc/kubernetes /pki/apiserver.crt -noout -text |grep ' Not ' 备份证书 cp -rp /etc/kubernetes /etc/kubernetes.bak 重新生成证书 |k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd'|xargs docker restart 检测 systemctl status
K8S证书过期问题 K8S证书过期处理方法 Unable to connect to the server: x509: certificate has expired or is not yet valid 1、查看证书有效期: # kubeadm certs check-expiration 2、备份证书 # cp -rp /etc/kubernetes /etc/kubernetes.bak 3、直接重建证书 k8s版本1.15之前使用: # kubeadm alpha certs renew all k8s版本1.15之后使用: # kubeadm certs renew all 4、再次查看证书有效期 docker restart 容器的ID # docker restart `docker ps -a | grep -E 'apiserver|scheduler|controller-manager'` 8、 # systemctl status kubelet 或者 # kubectl get pods 至此k8s证书更新完成 !!!!
上一小节我们介绍了Kubernetes里面涉及到的证书,有的有效期是10年,有的有效期是1年,而且除了根证书是10年,实际业务使用的证书都是1年。如果证书到期,我们应该怎么续期呢? 1.查看当前证书情况 kubeadm certs check-expiration 这个图里面显示的证书其实就是我们上一小节讲过的哪些证书主要包括: 3个ca证书,3个etcd证书,3个apiserver 证书,一个kubectl证书,一个controller-manager证书,一个scheduler证书,一个proxy启用代理证书。 #kubelet证书查看 [root@master01 ~]# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout kubeadm certs renew scheduler.conf 证书续期以后,当前应用程序还需要重启才会生效,静态pod的重启,参考我们前面讲过的Kubernetes(k8s)-静态pod介绍
1.准备签发证书环境 运维主机 hdss-1-200.host.com上: 2.安装CFSSL 证书签发工具CFSSL:R1.2 cfssl下载地址 https://pkg.cfssl.org/R1.2 200 bin]# which cfssl /usr/bin/cfssl [root@hdss-1-200 bin]# which cfssl-json /usr/bin/cfssl-json 5.签发证书 root@hdss-1-200 opt]# mkdir certs [root@hdss-1-200 opt]# cd certs/ [root@hdss-1-200 certs]# 6.创建生成CA证书签名请求 .20年 } } 7.签发证书 [root@hdss-1-200 certs]# cfssl gencert -initca ca-csr.json 2021/02/08 12:13:54 ==\n-----END RSA PRIVATE KEY-----\n"} 8.做成承载式证书 [root@hdss-1-200 certs]# ls ca-csr.json [root@hdss-1-
对于一份经由可信的证书签发机构签名或者可以通过其它方式验证的证书,证书的拥有者就可以用证书及相应的私钥来创建安全的通信,对文档进行数字签名. 另外除了证书本身功能,X.509还附带了证书吊销列表和用于从最终对证书进行签名的证书签发机构直到最终可信点为止的证书合法性验证算法。 一个x509的模板 // generate a serial number serialNumberLimit := new(big.Int).Lsh(big.NewInt(1) Round(time.Minute).Add(-5 * time.Minute).UTC() // basic template to use // 此日期前无效 此日期后无效 x509 证书组成结构 证书组成结构标准用ASN.1(一种标准的语言)来进行描述.
更新Xcode8适配iOS10之后,发布时邮件提醒我推送证书有问题: 似乎是APN的证书更新了,需要修正一下。 这里主要是发布时遇到问题,所以我们先只重新配置推送消息的发布证书,调试证书有需要的话之后还是一样的步骤。 所以我们选择发布的这个: 创建证书还是和以前一样,要本地的钥匙串中的证书助理来请求证书,名字和邮箱随便填,但是务必记得选择保存在磁盘,方便找到。然后提交到这个证书的申请文件中,就创建好证书了。 把证书下载下来,将钥匙串中过期的推送证书删掉,双击新证书安装。 然后要记得,Xcode 8需要在工程名->TARGET->Capabilities中开启Push Notifications: 开启时会自动检测证书,像图中一样都是勾就ok了。
/build.sh 检查证书有效期 . k8s-master1 front-proxy-ca.crt Nov 05, 2030 02:56 UTC 8y k8s-master1 更新K8S证书 . kubernetes v1.15以上更新证书的方法 更新/etc/kubernetes/pki目录下的所有证书(不包含ca证书) 注意:需要在每一个节点上都更新 # 查看现有证书到期时间 $ kubeadm alpha certs check-expiration # 使用二进制更新证书 $ kubeadm alpha certs renew all # 每月的最后1天 crontab -e * *
初始化集群时指定证书有效期 如果你在初始化集群时需要指定证书的有效期,可以在 kubeadm 配置文件中指定证书的有效期。可以通过 --config 参数加载一个配置文件,并在该文件中设置证书有效期。 配置文件示例(kubeadm-config.yaml):apiVersion: kubeadm.k8s.io/v1beta3kind: ClusterConfigurationcertificates: 更新已存在集群的证书有效期对于已存在的集群,kubeadm 提供了证书更新功能,可以续期集群中的证书,并指定新证书的有效期。 and etcd, so that they can use the new certificates.kubectl delete pod -n kube-system kube-apiserver-k8s-master kube-controller-manager-k8s-master kube-scheduler-k8s-master etcd-k8s-master重新拷贝admin.conf文件cp /etc/
重新生成证书 证书备份 cp -rp /etc/kubernetes /etc/kubernetes.bak 移除过期证书 rm -f /etc/kubernetes/pki/apiserver* rm healthcheck-client.* rm -rf /etc/kubernetes/pki/etcd/server.* rm -rf /etc/kubernetes/pki/etcd/peer.* 重新生成证书 /etc/kubernetes/*.conf /tmp/ kubeadm alpha phase kubeconfig all 重启kubelet systemctl restart kubelet 证书过期时间确认 openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not ' 其他同理 集群确认 kubectl get
更彻底的修复与核对清单有些同学会遇到这样一种情况:证书已经续了,但 apiserver 仍然每隔几秒打印 Unable to authenticate the request... x509。 (Kubernetes)systemd 定时巡检把脚本放到 /usr/local/sbin/k8s-cert-healer.sh,再配一个每周执行的定时器,避免再次踩坑:/etc/systemd/system /k8s-cert-healer.service[Unit]Description=Kubernetes cert healer[Service]Type=oneshotExecStart=/usr/local /sbin/k8s-cert-healer.sh/etc/systemd/system/k8s-cert-healer.timer[Unit]Description=Run k8s-cert-healer systemctl list-timers | grep k8s-cert-healer让 kubelet 自己换证:别忘了证书轮换与签发时长启用 kubelet 客户端证书自动轮换:kubelet
openssl pkcs8 -topk8 -in rsa_private.key -passout pass:111111 -out pkcs8_private.key 其中-passout指定了密码, 表示生成私钥(PKCS8格式),-nodes 表示私钥不加密,若不带参数将提示输入密码; -x509表示输出证书,-days365 为有效期,此后根据提示输入证书拥有者信息; 若执行自动输入,可使用 使用 CA 证书及CA密钥 对请求签发证书进行签发,生成 x509证书 openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key (pkcs#8): ? 输出一个X509格式的证书 3.10) -days X509证书的有效时间 3.11) -newkey rsa:bits
结论 证书校验过程需要先构造证书链,然后在进行签名、吊销等校验,在构造证书链过程中会根据证书的issuer编码值,在所有设置的可信或非可信证书区域(默认先可信区域查找)查找对应的subject编码值与被校验 如果被校验证书本身是自签名证书则要求CA证书和当前证书必须相同,会对比证书指纹等信息,证书指纹是整个证书的der编码的哈希值,并且subject和issuer中的大小写保持原样并不会转化成小写。 对比如下命令的输出就可以看出来: $ openssl x509 -in root-cert2.pem -noout -fingerprint SHA1 Fingerprint=B7:1F:6B:2A:8E -C openssl ca命令固定签发证书的serial和Not Before和Not After字段 从生成证书的过程可以看出两个证书有几个不同,可以用命令 openssl x509 -in root-cert.pem .pem: SHA1 Fingerprint=D2:C8:E9:06:7F:CD:81:83:7F:0F:8F:AA:0A:07:F8:93:A0:4A:AE:E4 Using configuration
原因:https证书 拉取私有镜像仓库的证书 echo -n | openssl s_client -showcerts -connect xxxxxx:8080 2>/dev/null | sed - ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /Users/xxxx/xx.crt 证书放在/Users/xxxx/xx.crt里 加载证书 sudo
-keyform arg -keyform DER -keyform NET -keyform PEM args8 生成新的证书请求 -new args9 输出一个 X509 格式的证书,签名证书时使用 -x509 args10 使用 X509 签名证书的有效时间 -days // openssl req -new -x509 -days 3650 -key ca.key -out ca.crt 1.1.3 x509 x509 可以实现显示证书的内容、转换其格式、给 CSR 签名等 指定用于签发请求证书的根 CA 证书 -CA arg args8 根 CA 证书格式(默认是 PEM) -CAform arg args9 指定用于签发请求证书的 ca.crt 和私钥 ca.key 对“请求签发证书” server.csr 进行签发,生成 x509 格式证书:openssl x509 -req -days 3650 -in server.csr