我正在尝试使用openssl运行下面的代码来读取证书。代码可以在Node.js 8.10的Lambda上工作。
const util = require('util');
const exec = util.promisify(require('child_process').exec);
var pemCert = "testCert.cer";
exports.handler = async (event) => {
return execute('Get Public Key Issuer', 'openssl x509 -in ' + pemCert + ' -noout -issuer -nameopt multiline | grep organizationName')
.then(result => {
return (result);
}).catch(error => {
console.log (error);
});
};
async function execute(purpose, command) {
try {
const {
stdout,
stderr
} = await exec(command);
console.log(purpose + " : " + command);
console.log('Execute stdout:', stdout);
return stdout;
} catch (error) {
console.log(purpose + " : " + command);
console.log("Error:" + error);
throw (purpose + " failed.");
}
}但是,当将Lambda与Node.js 12.x一起使用时,我会得到以下错误:
/bin/sh: openssl: command not found在新的Node.js中,AWS似乎在运行时不支持openssl,在节点12的Lambda中,有什么替代方法可以用来执行openssl命令呢?
发布于 2020-01-08 09:15:17
引用AWS发送的电子邮件
“我们正在更新AWS Lambda和AWS Lambda@Edge执行环境,以包括Amazon的最新版本和软件包。
大多数功能将无缝地受益于此更新中的增强功能,而无需采取任何操作。然而,在少数情况下,包更新可能会带来兼容性问题。包含针对非常特定的底层操作系统包(特别是openssl、glibc或其他系统库)编译的库或应用程序代码的函数可能会受到影响。
从2019年5月14日开始,您可以使用新的执行环境测试您的函数。从2019年5月21日起,所有新功能或现有功能的更新都将使用新的执行环境。您现有的函数将在2019年6月11日自动迁移到使用新的执行环境。“
另一种选择是使用AWS层(https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html)。
您可以在这里看到详细的步骤- NPM package pem doesn't seem to work in AWS lambda NodeJS 10.x (results in OpenSSL error)
https://stackoverflow.com/questions/59640899
复制相似问题