diff --git a/src/remote/activitypub/renderer/key.ts b/src/remote/activitypub/renderer/key.ts index 334e5e00cd..e792f487fd 100644 --- a/src/remote/activitypub/renderer/key.ts +++ b/src/remote/activitypub/renderer/key.ts @@ -1,10 +1,14 @@ import config from '../../../config'; import { ILocalUser } from '../../../models/entities/user'; import { UserKeypair } from '../../../models/entities/user-keypair'; +import { createPublicKey } from 'crypto'; -export default (user: ILocalUser, key: UserKeypair) => ({ - id: `${config.url}/users/${user.id}/publickey`, +export default (user: ILocalUser, key: UserKeypair, postfix?: string) => ({ + id: `${config.url}/users/${user.id}${postfix || '/publickey'}`, type: 'Key', owner: `${config.url}/users/${user.id}`, - publicKeyPem: key.publicKey + publicKeyPem: createPublicKey(key.publicKey).export({ + type: 'spki', + format: 'pem' + }) }); diff --git a/src/remote/activitypub/renderer/person.ts b/src/remote/activitypub/renderer/person.ts index d4c018fb78..07a0eeed42 100644 --- a/src/remote/activitypub/renderer/person.ts +++ b/src/remote/activitypub/renderer/person.ts @@ -108,7 +108,7 @@ export async function renderPerson(user: ILocalUser) { image: banner ? renderImage(banner) : null, tag, manuallyApprovesFollowers: user.isLocked, - publicKey: renderKey(user, keypair), + publicKey: renderKey(user, keypair, `#main-key`), isCat: user.isCat, attachment: attachment.length ? attachment : undefined }; diff --git a/src/remote/activitypub/request.ts b/src/remote/activitypub/request.ts index bcbb0fbe70..869fabd032 100644 --- a/src/remote/activitypub/request.ts +++ b/src/remote/activitypub/request.ts @@ -56,7 +56,7 @@ export default async (user: ILocalUser, url: string, object: any) => { sign(req, { authorizationHeaderName: 'Signature', key: keypair.privateKey, - keyId: `${config.url}/users/${user.id}/publickey`, + keyId: `${config.url}/users/${user.id}#main-key`, headers: ['date', 'host', 'digest'] }); diff --git a/src/server/api/private/signup.ts b/src/server/api/private/signup.ts index 63216019e9..af1aefda84 100644 --- a/src/server/api/private/signup.ts +++ b/src/server/api/private/signup.ts @@ -91,21 +91,21 @@ export default async (ctx: Koa.Context) => { return; } - const keyPair = await new Promise((s, j) => + const keyPair = await new Promise((res, rej) => generateKeyPair('rsa', { modulusLength: 4096, publicKeyEncoding: { - type: 'pkcs1', + type: 'spki', format: 'pem' }, privateKeyEncoding: { - type: 'pkcs1', + type: 'pkcs8', format: 'pem', cipher: undefined, passphrase: undefined } - } as any, (e, publicKey, privateKey) => - e ? j(e) : s([publicKey, privateKey]) + } as any, (err, publicKey, privateKey) => + err ? rej(err) : res([publicKey, privateKey]) )); let account!: User;