我最近在 Node.js 上使用 google 云存储 SDK 时遇到了这个错误。 我知道这在过去没有任何更改的情况下有效,但我已经有一段时间没有接触代码了,可能是错误的。
这是错误本身:
Error: error:1E08010C:DECODER routines::unsupported
at Sign.sign (node:internal/crypto/sig:131:29)
at Object.sign (node_modules/jwa/index.js:152:45)
at Object.jwsSign [as sign] (node_modules/jws/lib/sign-stream.js:32:24)
at GoogleToken.requestToken (node_modules/gtoken/build/src/index.js:232:31)
at GoogleToken.getTokenAsyncInner (node_modules/gtoken/build/src/index.js:166:21)
at GoogleToken.getTokenAsync (node_modules/gtoken/build/src/index.js:145:55)
at GoogleToken.getToken (node_modules/gtoken/build/src/index.js:97:21)
at JWT.refreshTokenNoCache (node_modules/google-auth-library/build/src/auth/jwtclient.js:172:36)
at JWT.refreshToken (node_modules/google-auth-library/build/src/auth/oauth2client.js:153:24)
at JWT.getRequestMetadataAsync (node_modules/google-auth-library/build/src/auth/oauth2client.js:298:28) {
library: 'DECODER routines',
reason: 'unsupported',
code: 'ERR_OSSL_UNSUPPORTED'
}
引发此错误的代码如下:
const credentials = {
type: process.env.TYPE,
project_id: process.env.PROJECT_ID,
private_key_id: process.env.PRIVATE_KEY_ID,
private_key: process.env.PRIVATE_KEY,
client_email: process.env.CLIENT_EMAIL,
client_id: process.env.CLIENT_ID,
auth_uri: process.env.AUTH_URI,
token_uri: process.env.TOKEN_URI,
auth_provider_x509_cert_url: process.env.AUTH_PROVIDER_X509_CERT_URL,
client_x509_cert_url: process.env.CLIENT_X509_CERT_URL,
};
const storage = new Storage({
credentials,
});
if (!req.file) {
logger('POST /profile_image', logLevels.error, 'No file uploaded!');
ResponseError.badRequest(res);
}
const bucketName = process.env.BUCKET_NAME;
const bucket = storage.bucket(bucketName);
const fileName = `profile_pics/${req.user}/${req.file.originalname}`;
const file = bucket.file(fileName);
const stream = file.createWriteStream({
metadata: {
contentType: req.file.mimetype,
},
});
stream.on('error', (err) => {
console.error('Error pushing the picture: ', err); <--- error
throw err;
});
stream.on('finish', () => {
return file.makePublic().then(async () => {
...
})
});
stream.end(req.file.buffer);
process.env
包含所有正确的值,我已确保尝试使用新的私钥但出现相同的错误。有人看过这个吗?
蒂亚!
我遇到了同样的问题并通过替换 raw 来修复它 带有换行符的字符。也许您从您的环境中获得了作为原始数据的密钥,并且 原始字符不被视为换行符。你可以试试这个:
private_key: process.env.PRIVATE_KEY.split(String.raw`\n`).join('\n'),
作为社区维基回答这个问题。正如上面 John Hanley
的评论中提到的我认为您需要检查 .env 文件并确保私钥中没有添加任何额外字符,例如末尾的逗号“,”。 这就是我收到此错误的原因。
如果您最近将 openssl 升级到版本 3,则可能需要在 /etc/ssl/openssl.cnf 文件中启用旧版证书:
openssl_conf = openssl_init
[openssl_init]
providers = provider_sect
[provider_sect]
default = default_sect
legacy = legacy_sect
[default_sect]
activate = 1
[legacy_sect]
activate = 1
此信息来自 OpenSSL WIKI
使
.env
中的两个键仅成为一行(对我有用的唯一方法)
PUBLIC_KEY="-----BEGIN PUBLIC KEY-----\n<PUBLIC KEY>\n-----END PUBLIC KEY-----"
PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\n<PRIVATE KEY>\n-----END RSA PRIVATE KEY-----"