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<string[]>((s, j) =>
+	const keyPair = await new Promise<string[]>((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;