📜  如何在 Rails 中解密凭据 - Ruby (1)

📅  最后修改于: 2023-12-03 15:38:25.133000             🧑  作者: Mango

如何在 Rails 中解密凭据 - Ruby

在 Rails 中使用凭据(Credentials)来存储敏感信息,例如 API 密钥、用户名和密码等。这些凭据存储在加密文件中,以确保安全性。但是,在代码中需要使用这些凭据时,我们需要将它们解密。这篇文章将提供如何在 Rails 中解密凭据的详细解释。

凭据的加密和解密

Rails 使用 config/master.key 文件对凭据进行加密和解密,该文件必须是机密和安全的。在部署应用程序时,您应该将 master.key 文件保护好。您可以将其存储在服务器环境变量中,例如 ENV['RAILS_MASTER_KEY'],或存储在云密钥管理服务中。

要在 Rails 代码中使用凭据,首先您需要在 config/credentials.yml.enc 文件中存储它们。该文件是加密的 YAML 文件,其中包含您需要存储的凭据。例如:

api:
  key: 123456789abcdefg
  secret: abcdefghijklmnopqrstuvwxyz

在此示例中,我们存储了 api 凭据,其中包含 keysecret 的信息。

要访问这些凭据,您可以使用 Rails.application.credentials 对象。例:

Rails.application.credentials.api[:key]

这将返回 123456789abcdefg

如何解密凭据

在您访问凭据之前,Rails 将自动解密 credentials.yml.enc 文件。当您访问 Rails.application.credentials 对象时,Rails 将自动使用 config/master.key 文件对凭据进行解密并将其加载到内存中。

如果您需要手动解密凭据,您可以使用 Rails::Credentials 模块的 read 方法。例如,以下代码将读取并解密凭据:

require 'yaml'
require 'encrypted_strings'

encrypted_file = File.read('config/credentials.yml.enc')
decrypted_file = EncryptedStrings.decrypt(encrypted_file, key: Rails.application.credentials.config[:decryption_key])
credentials = YAML.load(decrypted_file)

api_credentials = credentials['api']

注意,此示例假定您已经拥有了解密 config/credentials.yml.enc 文件的过程所需的密钥,即 decryption_key。这可以是存储在环境变量中的值,或存储在云密钥管理服务中的值。

结论

在 Rails 中使用凭据存储敏感信息可以确保应用程序的安全性。要访问这些凭据,您可以使用 Rails.application.credentials 对象。如果您需要手动解密凭据,则可以使用 Rails::Credentials 模块的 read 方法。不要忘记保护好 config/master.key 文件,以确保凭据安全!