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

如何利用OpenSSL从证书生成符合格式的known_host文件?

直接用OpenSSL没法生成,但结合shell工具可以一步搞定

OpenSSL本身没有内置参数直接输出你要的<hostname>:<port> <hex-string>格式,但你可以把OpenSSL的输出和简单的shell文本处理命令(比如sed)结合,一次性生成符合要求的known_hosts内容,不用手动修改。

单证书处理命令

假设你的服务器主机名是example.com,端口是22,证书路径为./server.crt,可以用下面的命令直接生成并追加到known_hosts文件:

# 替换成你的实际主机名、端口和证书路径
HOST="example.com"
PORT="22"
CERT_PATH="./server.crt"

# 生成格式化后的指纹并写入文件
FINGERPRINT=$(openssl x509 -noout -in "$CERT_PATH" -fingerprint -sha256 | sed 's/SHA256 Fingerprint=//; s/://g')
echo "$HOST:$PORT $FINGERPRINT" >> known_hosts

命令解释

  • openssl x509 ...:生成带冒号分隔的SHA256指纹,输出格式是SHA256 Fingerprint=AA:BB:CC:...
  • sed 's/SHA256 Fingerprint=//; s/://g':先去掉前缀标识,再删除所有冒号,得到纯十六进制字符串
  • echo ... >> known_hosts:把主机名+端口和指纹拼接成要求的格式,追加到目标文件

批量处理(可选)

如果要处理多个证书,对应不同的主机和端口,可以写个简单的shell循环:

# 示例:遍历证书文件,假设文件名格式为<hostname>-<port>.crt
for cert in *.crt; do
    # 从文件名提取主机名和端口
    HOST_PORT=$(basename "$cert" .crt)
    HOST=$(echo "$HOST_PORT" | cut -d'-' -f1)
    PORT=$(echo "$HOST_PORT" | cut -d'-' -f2)
    
    FINGERPRINT=$(openssl x509 -noout -in "$cert" -fingerprint -sha256 | sed 's/SHA256 Fingerprint=//; s/://g')
    echo "$HOST:$PORT $FINGERPRINT" >> known_hosts
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:35:20