HTTPS – 证书签发申请(CSR) - qikegu.com

HTTPS 教程

相关推荐

HTTPS – 证书签发申请(CSR)

为了获得SSL证书,你需要生成证书签发申请(CSR)提交给证书颁发机构(CA)。

什么是CSR?

CSR是由申请人为获得SSL证书提交给CA的申请,是一段编码信息。

CSR包含一个公钥以及申请人信息,如FQDN(完全限定域名)、组织名称和地址。CA验证申请人的信息,并使用CSR中包含的公钥颁发SSL证书。

通常,CSR是使用将要安装SSL证书的web服务器生成的。不过,它也可以使用SSL工具或浏览器(如Chrome或Firefox)生成。CSR最常见的格式是PKCS #10规范

CSR是一段Base64 ASCII编码信息,以-----BEGIN NEW CERTIFICATE REQUEST-----开始,以-----END NEW CERTIFICATE REQUEST-----结束。

CSR示例:

    -----BEGIN NEW CERTIFICATE REQUEST-----
    MIIERzCCAy8CAQAwZzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk5ZMREwDwYDVQQH
    DAhuZXcgeW9yazEPMA0GA1UECgwGbXkgb3JnMQswCQYDVQQLDAJJVDEaMBgGA1UE
    AwwRd3d3Lm15d2Vic2l0ZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
    AoIBAQCfvbkuJwMiwOwgvRAV1XS/HZFGH0I6/p2NyOn7onb8uEV3cMFf4iCzBN6Z
    KJD92qVtmZSBpH9IQrYiEohTxkgJ2c/dyX06eDVS7nE53etPOZCM8VvJOq/7PDo+
    7Kvy6jhQVU7Rb1mQrFcrU0GVOQWWqqtpHwbeKPfJ3mRlPNzygmXAUXkv0XdstQPm
    b5sVx965SGoIgrRUDpl+UNUcE198AVPEiDUg1VqY+mUmyOcvCkO153UtxDUMoocg
    S5WlfD83We35a7I6+FAvDKKk31gv6Jxfs/EzZ6D0iiytDMAWNRwDvaYcu06O8Ye/
    rt9mFF90XsMMn7xi0cuCaLzG7JrJAgMBAAGgggGZMBoGCisGAQQBgjcNAgMxDBYK
    Ni4xLjc2MDEuMjA1BgkrBgEEAYI3FRQxKDAmAgEFDAdkZWxsLVBDDAtkZWxsLVBD
    XERldgwLSW5ldE1nci5leGUwcgYKKwYBBAGCNw0CAjFkMGICAQEeWgBNAGkAYwBy
    AG8AcwBvAGYAdAAgAFIAUwBBACAAUwBDAGgAYQBuAG4AZQBsACAAQwByAHkAcAB0
    AG8AZwByAGEAcABoAGkAYwAgAFAAcgBvAHYAaQBkAGUAcgMBADCBzwYJKoZIhvcN
    AQkOMYHBMIG+MA4GA1UdDwEB/wQEAwIE8DATBgNVHSUEDDAKBggrBgEFBQcDATB4
    BgkqhkiG9w0BCQ8EazBpMA4GCCqGSIb3DQMCAgIAgDAOBggqhkiG9w0DBAICAIAw
    BAEFMAcGBSsOAwIHMAoGCCqGSIb3DQMHMB0GA1UdDgQWBBS4T+amOyNS+ECWfIxw
    eBUR+XRv+TCTfXvFRiQ35T960o79JqJZpaD+PS9HNghqS05ldsrA/p/n/1rG9T+n
    1a6jTj6BEwOLaTfUWlq8KtkkYiROOC9LqhQCn84PQuO3L9clLrsV//1C4hGkFUbG
    -----END NEW CERTIFICATE REQUEST-----

复制

生成CSR

可以使用OpenSSL工具创建CSR。

运行以下命令:

openssl req -new -nodes -keyout private.key -out server.csr

复制

将得到两个输出文件:

  • private.key: 这是你的私钥。你应该将其存储在服务器的安全位置,安装证书时需要用到。
  • server.csr: 证书签发申请(CSR),将被提交给CA

公钥与私钥

当生成CSR时,会生成一个密钥对:公钥和私钥。CSR中包含一个公钥,提交给CA,私钥通常保存在web服务器所在的系统中,安装证书时将使用此私钥。


Doc navigation

← HTTPS - 怎样获取SSL证书?

HTTPS - 免费SSL证书(letsencrypt) →

<think>我们正在讨论如何续期kubelet-client-current.pem证书。根据引用内容,这个证书是kubelet的客户端证书,用于kubelet与APIServer之间的认证。续期方法有两种:自动轮换和手动续期。用户特别提到了kubelet-client-current.pem,所以我们重点关注这个证书。根据引用[2]和[3]: -自动轮换:当配置了自动轮换后,kubelet会自动更新这个证书。kubelet-client-current.pem是一个符号链接,指向当前有效的客户端证书(如kubelet-client-2020-11-15-15-57-15.pem)。-如果自动轮换没有正常工作,可能会导致证书过期,此时需要手动干预。 **步骤概述:**1.**检查证书状态**:确认证书是否过期或即将过期。 2. **自动轮换配置**:如果尚未配置自动轮换,则进行配置(推荐)。3.**手动续期**:如果自动轮换配置后仍未更新,或者需要立即续期,则进行手动操作。 **详细步骤:**###一、检查证书有效期在节点上执行:```bashopenssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem-noout -dates``` 输出示例:``` notBefore=Nov1507:52:152020GMTnotAfter=Nov1507:52:152021 GMT```###二、配置自动轮换(推荐) 如果尚未配置自动轮换,请按以下步骤操作:1.**确保kube-controller-manager启用相关特性**编辑文件`/etc/kubernetes/manifests/kube-controller-manager.yaml`(在Master节点上),添加或确保以下参数:```yamlspec:containers:-command:---feature-gates=RotateKubeletClientCertificate=true#启用客户端证书轮换- --cluster-signing-duration=87600h0m0s#设置CA签名有效期(可选,延长CA有效期)```2.**配置kubelet**编辑kubelet配置文件`/var/lib/kubelet/config.yaml`,添加:```yamlfeatureGates:RotateKubeletClientCertificate:true#启用客户端证书轮换rotateCertificates: true#允许kubelet自动轮换证书```3.**重启kubelet**```bashsystemctldaemon-reloadsystemctlrestart kubelet``` >**注意**:自动轮换需要kube-controller-manager的证书签发功能正常工作[^3]。###三、手动续期(如果自动轮换未触发) 如果证书已经过期,自动轮换可能无法正常工作,需要手动操作:1.**删除旧证书**(可选,备份后删除)```bashmv/var/lib/kubelet/pki/kubelet-client-current.pem/tmp/kubelet-client-current.pem.bak``` 2. **重启kubelet触发重新申请**```bashsystemctlrestart kubelet``` 3. **检查kubelet是否自动生成新证书**查看新证书:```bashls -l /var/lib/kubelet/pki/kubelet-client-current.pemopensslx509-in/var/lib/kubelet/pki/kubelet-client-current.pem -noout-dates``` 4. **如果重启后未生成新证书**(可能CSR未被批准)-检查未批准的CSR:```bashkubectl getcsr```-批准该节点的CSR(假设CSR名称为`node-name-csr`):```bashkubectlcertificate approve<node-name-csr>``` 5. **手动获取证书**(参考引用[3])如果批准后证书未自动下发,可手动保存:```bashkubectlget csr <node-name-csr>-ojsonpath='{.status.certificate}' |base64--decode> /var/lib/kubelet/pki/kubelet-client-current.pemsystemctl restartkubelet```###四、验证-查看新证书有效期:```bashopensslx509-in/var/lib/kubelet/pki/kubelet-client-current.pem -noout-dates``` -检查kubelet日志:```bashjournalctl-ukubelet |grep certificate``` >**关键提示**:> -手动操作后建议配置自动轮换以避免再次过期[^2][^5]> -确保节点时间同步(NTP)[^4]§§相关问题§§1.如何检查Kubernetes集群中所有节点的kubelet证书有效期?2.kube-controller-manager的证书自动签发功能依赖哪些条件?3.为什么kubelet客户端证书轮换需要批准CertificateSigningRequest?4.如何批量修复多节点集群中的过期 kubelet证书?</think>### 如何续期 kubelet-client-current.pem 证书 kubelet-client-current.pem 是 kubelet 的**客户端证书**,用于 kubelet 与 API Server 的认证。续期方法如下: --- #### 一、自动续期(推荐方案) **前提条件**:已配置证书自动轮换功能(Kubernetes ≥ 1.8) 1. **检查自动轮换状态** ```bash # 查看证书符号链接(自动轮换成功会生成新证书) ls -l /var/lib/kubelet/pki/kubelet-client-current.pem ``` 正常输出示例(带时间戳的证书文件): `lrwxrwxrwx ... kubelet-client-current.pem -> kubelet-client-2025-06-01-12-34-56.pem` 2. **触发自动续期** ```bash # 重启 kubelet 触发证书轮换 sudo systemctl restart kubelet # 查看日志确认 journalctl -u kubelet | grep -i "certificate" ``` 成功日志示例: `Certificate rotation request completed, new certificate is in use` > **验证**: > ```bash > openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates > ``` > 输出中的 `notAfter` 应为未来时间(默认1年有效期)[^2] --- #### 二、手动续期(适用于自动轮换失效或证书已过期) ##### 步骤1:删除旧证书(强制 kubelet 重新申请) ```bash # 备份旧证书 sudo cp /var/lib/kubelet/pki/kubelet-client-current.pem{,.bak} # 删除证书文件(实际删除符号链接指向的文件) sudo rm -f $(readlink -f /var/lib/kubelet/pki/kubelet-client-current.pem) sudo rm /var/lib/kubelet/pki/kubelet-client-current.pem # 删除符号链接 ``` ##### 步骤2:重启 kubelet 触发证书申请 ```bash sudo systemctl restart kubelet ``` ##### 步骤3:批准证书签名请求(CSR) ```bash # 查看待处理的 CSR kubectl get csr | grep Pending # 批准该节点的 CSR(替换 NODE_NAME) kubectl certificate approve <NODE_NAME>-csr ``` ##### 步骤4:手动保存新证书(可选) 如果证书未自动下发[^3]: ```bash # 获取证书内容(替换 NODE_NAME) kubectl get csr <NODE_NAME>-csr -o jsonpath='{.status.certificate}' | base64 --decode | sudo tee /var/lib/kubelet/pki/kubelet-client-current.pem # 重启 kubelet sudo systemctl restart kubelet ``` --- #### 三、配置自动轮换(未开启时) 若未配置自动轮换,需修改以下配置: 1. **Master 节点**:编辑 Controller Manager ```yaml # /etc/kubernetes/manifests/kube-controller-manager.yaml command: - --feature-gates=RotateKubeletClientCertificate=true # 启用客户端证书轮换 - --cluster-signing-duration=87600h # 设置CA有效期(10年) ``` 2. **工作节点**:修改 kubelet 配置 ```yaml # /var/lib/kubelet/config.yaml rotateCertificates: true # 启用证书轮换 featureGates: RotateKubeletClientCertificate: true ``` 3. **重启服务** ```bash sudo systemctl daemon-reload sudo systemctl restart kubelet ``` --- #### 关键说明: 1. 证书路径:`/var/lib/kubelet/pki/kubelet-client-current.pem` 是符号链接,指向带时间戳的实际证书[^2] 2. 续期机制: - 客户端证书由 kubelet 主动申请,Controller Manager 签发[^1] - 证书过期前会自动轮换(默认提前 70% 有效期) 3. 过期处理:若证书已过期导致 kubelet 无法启动,需从正常节点复制证书或按手动流程操作[^4] > **故障排查**: > ```bash > journalctl -u kubelet | grep -i "certificate" # 查看证书错误 > ntpdate -u pool.ntp.org # 检查时间同步 > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值