You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在命令行中指定自签名证书的起始日期与结束日期?

单条OpenSSL命令生成自定义自签名证书

刚好我之前也折腾过类似的需求,给你整理了一个完整的单条命令解决方案,能一次性搞定证书主体信息、自定义扩展(比如SAN)和有效期起止日期,还修复了你原来命令里重复-subj的问题:

openssl req -x509 -sha256 -key /tmp/server.key -out /tmp/server.crt \
  -subj "/C=US/ST=CA/O=Acme Inc./CN=192.168.56.101" \
  -extensions SAN -config <(printf "[req]\ndistinguished_name=dn\n[dn]\n[SAN]\nsubjectAltName=DNS:ottavio.com,DNS:www.ottavio.com") \
  -days 365 -startdate 20240101000000Z

各参数说明:

  • -x509:告诉OpenSSL直接生成自签名证书,而非证书签名请求(CSR)
  • -sha256:用更安全的SHA-256哈希算法替代SHA-1(SHA-1已被淘汰,不建议再使用)
  • -key /tmp/server.key:指定你已生成好的私钥路径;如果还没有私钥,可以看下面的「一步到位版本」
  • -out /tmp/server.crt:输出最终证书的路径
  • -subj "...":填写证书的主体信息,格式为/C=国家代码/ST=州/O=组织名/CN=通用名称,可按需调整字段
  • -extensions SAN:指定要启用的扩展段,对应后面临时配置里的[SAN]区块
  • -config <(printf "..."):用临时生成的配置片段定义SAN扩展,无需单独编写配置文件
  • -days 365:证书的有效天数,结束日期=起始日期+该天数
  • -startdate 20240101000000Z:自定义证书起始日期,格式为YYYYMMDDHHMMSSZ(Z代表UTC时区);不需要自定义的话直接去掉该参数,默认从当前时间开始

生成私钥+证书的一步到位版本:

如果还没有现成的私钥,可以把生成私钥和证书合并成一条命令:

openssl req -x509 -sha256 -newkey rsa:2048 -nodes -keyout /tmp/server.key -out /tmp/server.crt \
  -subj "/C=US/ST=CA/O=Acme Inc./CN=192.168.56.101" \
  -extensions SAN -config <(printf "[req]\ndistinguished_name=dn\n[dn]\n[SAN]\nsubjectAltName=DNS:ottavio.com,DNS:www.ottavio.com") \
  -days 365 -startdate 20240101000000Z

新增参数说明:

  • -newkey rsa:2048:生成2048位RSA私钥(安全性足够日常使用)
  • -nodes:生成的私钥不加密;如果需要加密私钥,去掉该参数即可,系统会提示设置密码

小提示:

  • SAN扩展支持多种类型条目,比如要添加IP地址,可改成subjectAltName=DNS:ottavio.com,DNS:www.ottavio.com,IP:192.168.56.101
  • 嫌换行麻烦的话,去掉所有反斜杠\,把命令写成一行也能正常执行

内容的提问来源于stack exchange,提问作者Ottavio Campana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:35:20