如何安全地存储SSL或公钥?[关闭]

How to store securely SSL or public private keys? [closed]

提问人:hdevtr 提问时间:10/12/2023 最后编辑:Brian Tompsett - 汤莱恩hdevtr 更新时间:10/12/2023 访问量:49

问:


想改进这个问题吗?更新问题,以便可以通过编辑这篇文章用事实和引文来回答。

上个月关闭。

我有这样的钥匙。

MIID0DCCArigAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJGUjET
MBEGA1UECAwKU29tZS1TdGF0ZTEOMAwGA1UEBwwFUGFyaXMxDTALBgNVBAoMBERp
bWkxDTALBgNVBAsMBE5TQlUxEDAOBgNVBAMMB0RpbWkgQ0ExGzAZBgkqhkiG9w0B
CQEWDGRpbWlAZGltaS5mcjAeFw0xNDAxMjgyMDM2NTVaFw0yNDAxMjYyMDM2NTVa
MFsxCzAJBgNVBAYTAkZSMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJ
bnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxFDASBgNVBAMMC3d3dy5kaW1pLmZyMIIB
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvpnaPKLIKdvx98KW68lz8pGa
RRcYersNGqPjpifMVjjE8LuCoXgPU0HePnNTUjpShBnynKCvrtWhN+haKbSp+QWX
SxiTrW99HBfAl1MDQyWcukoEb9Cw6INctVUN4iRvkn9T8E6q174RbcnwA/7yTc7p
1NCvw+6B/aAN9l1G2pQXgRdYC/+G6o1IZEHtWhqzE97nY5QKNuUVD0V09dc5CDYB
aKjqetwwv6DFk/GRdOSEd/6bW+20z0qSHpa3YNW6qSp+x5pyYmDrzRIR03os6Dau
ZkChSRyc/Whvurx6o85D6qpzywo8xwNaLZHxTQPgcIA5su9ZIytv9LH2E+lSwwID
AQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVy
YXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQU+tugFtyN+cXe1wxUqeA7X+yS3bgw
HwYDVR0jBBgwFoAUhMwqkbBrGp87HxfvwgPnlGgVR64wDQYJKoZIhvcNAQEFBQAD
ggEBAIEEmqqhEzeXZ4CKhE5UM9vCKzkj5Iv9TFs/a9CcQuepzplt7YVmevBFNOc0
+1ZyR4tXgi4+5MHGzhYCIVvHo4hKqYm+J+o5mwQInf1qoAHuO7CLD3WNa1sKcVUV
vepIxc/1aHZrG+dPeEHt0MdFfOw13YdUc2FH6AqEdcEL4aV5PXq2eYR8hR4zKbc1
fBtuqUsvA8NWSIyzQ16fyGve+ANf6vXvUizyvwDrPRv/kfvLNa3ZPnLMMxU98Mvh
PXy3PkB8++6U4Y3vdk2Ni2WYYlIls8yqbM4327IKmkDc2TimS8u60CT47mKU7aDY
cbTV5RDkrlaYwm5yqlTIglvCv7o=
-----END CERTIFICATE-----

我正在使用 Node.js 和 TypeScript 开发一个 API,我有用于 JWT 和 HTTPS 的公私钥和证书密钥。重要的是不要在我的代码中暴露它们。如果我用于读取文件,则文件将在我的项目中可见。fs.readFileSync(..)

是否可以从 .env 提供它们?

或者最佳实践是什么?

JavaScript 节点 .js 打字稿 安全性

评论


答:

1赞 mandy8055 10/12/2023 #1

您可以使用 dotenv 包来实现您的目标。您可以简单地将文件路径存储在文件中,然后根据需要将其加载到代码中。像这样:.envdotenv

PRIVATE_KEY_LOC=./path/to/private-key.pem
PUBLIC_KEY_LOC=./path/to/public-key.pem
CERTIFICATE_LOC=./path/to/certificate.pem
import fs from 'fs';
import path from 'path';
import dotenv from 'dotenv';

dotenv.config();

const privateKeyPath = path.resolve(process.cwd(), process.env.PRIVATE_KEY_LOC!);
const publicKeyPath = path.resolve(process.cwd(), process.env.PUBLIC_KEY_LOC!);
const certificatePath = path.resolve(process.cwd(), process.env.CERTIFICATE_LOC!);

const privateKey = fs.readFileSync(privateKeyPath, 'utf-8');
const publicKey = fs.readFileSync(publicKeyPath, 'utf-8');
const certificate = fs.readFileSync(certificatePath, 'utf-8');

评论

0赞 hdevtr 10/12/2023
我目前正在以这种方式使用它,但我不确定这是否是最佳实践。谢谢你的回答。
0赞 hdevtr 10/12/2023
知道路径在上线时是否会导致安全漏洞?
0赞 mandy8055 10/12/2023
不!只要你不打算把你的文件推送到公共场合,我想你已经知道不要提交你的.env文件.env
0赞 hdevtr 10/12/2023
我不是在谈论 .env 文件。我认为有一个误会。我的意思是在函数中指定目录是不正确的。但我心中没有更多的问题了。谢谢:)fs.readFileSync
0赞 mandy8055 10/12/2023
不,它不会。在生产区域中,您将在执行环境的环境变量中提供这些文件路径。env 变量会自动将键问题与您的代码分开。另外,如果您在使用任何日志记录系统,请在代码中注意不要在日志中公开它们。