Skip to content

签名密钥对

yushijinhun edited this page Apr 21, 2018 · 8 revisions

目录

概述

本文主要介绍 Yggdrasil 中用于数字签名的密钥对。文中将使用 OpenSSL 对密钥进行操作。

Yggdrasil 服务端持有私钥,而客户端持有公钥。

服务端会对以下请求的响应中的角色属性进行数字签名

服务端通过扩展 API将公钥公开,以便 authlib-injector 自动获取。

注意:Yggdrasil 服务端应避免密钥的变化(不要每次启动时都生成一个,应在生成后将其保存)。 但不同的 Yggdrasil 服务不应使用同一个密钥。 如果使用多个服务端实例进行负载均衡,那么它们应该使用同一个密钥。

密钥对的生成和处理

下面对 OpenSSL 的调用都是使用标准输入和标准输出进行输入输出的。 如果要使用文件,可使用参数 -in <file>-out <file>

生成私钥

密钥算法为 RSA,且长度至少为 4096 位。

openssl genrsa 4096

生成的私钥将输出到标准输出。

私钥需要妥善保存,以防泄露(文件权限应为 rw-r-----)。

从私钥生成公钥

openssl rsa -pubout

私钥从标准输入读入,公钥将输出到标准输出。

将 DER 格式公钥转换为 PEM 格式

authlib-injector 使用的是 PEM 格式的公钥。 如果您有一个 DER 格式的公钥(如 authlib-agent 生成的),您可以通过以下命令转换:

openssl rsa -pubin -inform der

DER 格式公钥从标准输入读入,PEM 格式公钥将输出到标准输出。

Clone this wiki locally