【问题标题】:Jasypt StandardPBEStringEncryptor setting password in spring bean configuration fileJasypt StandardPBEStringEncryptor在spring bean配置文件中设置密码
【发布时间】:2011-03-19 13:35:56
【问题描述】:

当使用 Jasypt 的 StandardPBEStringEncryptor 时,我们必须在 spring bean 配置文件中明确设置密码。在 bean 配置文件中有密码是否可以且安全?存储加密器密码是否会成为 PCI 合规性问题?

【问题讨论】:

    标签: security encryption spring-security pci-dss jasypt


    【解决方案1】:

    将不符合 PCI 标准。数据加密密钥不能以明文形式存储。具体点是3.5.2,即:

    检查系统配置文件以 验证密钥是否存储在 加密格式,并且 存储密钥加密密钥 与数据加密密钥分开。

    您可能还会在密钥管理领域遇到其他问题,例如 3.6.6(拆分知识和密钥的双重控制)

    验证密钥管理程序 实施要求拆分 知识和钥匙的双重控制 (例如,需要两个或三个 人,每个人都只知道自己的 密钥的一部分,重建 整个键)。

    Key management 是 PCI 合规性中最具挑战性的部分。您可能需要考虑使用(已经符合 PCI 的)第 3 方来管理您的卡数据。如果您自己动手,那么我建议您尽早获得 QSA(PCI 合格安全评估员)的帮助,以评估您计划实施的安全性。最终,您需要说服 QSA 才能通过您的 PCI 要求,他们会非常乐意提供建议。

    【讨论】:

      【解决方案2】:

      您需要将对称密钥存储在某处。配置文件是个好地方,只要没有人可以访问它。

      【讨论】:

        【解决方案3】:

        我有个主意

        您可以使用 keystore.jks 的 keyPair 加密所有纯密码。您知道 keystore.jks 有自己的密码。您可以记住该密码,并在您的程序开始时在控制台上输入密码。例如当你的程序启动时:

        Console console = System.console();
                keyPair = loadKeystore(new String(console.readPassword()));
        
        
        private static KeyPair loadKeystore(String pwd) {
                InputStream is = Main.class.getResourceAsStream("/keystore.jks");
        
                KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
                keystore.load(is, s.toCharArray());
        
                String alias = "youralias";
        
                Key key = keystore.getKey(alias, pwd.toCharArray());
                if (key instanceof PrivateKey) {
                    // Get certificate of public key
                    Certificate cert = keystore.getCertificate(alias);
        
                    // Get public key
                    PublicKey publicKey = cert.getPublicKey();
        
                    // Return a key pair
                    return new KeyPair(publicKey, (PrivateKey) key);
                }
                return null;
            }
        

        当您返回密钥对时,您可以使用它来加密您的密码。

        key = loadKeystore("yourpass").getPrivate().getEncoded()

        祝你好运

        【讨论】:

          猜你喜欢
          • 2013-12-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-11
          • 2014-08-15
          相关资源
          最近更新 更多