65.9K
CodeProject 正在变化。 阅读更多。
Home

Mule ESB + PGP:良好隐私

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2016年5月23日

CPOL

3分钟阅读

viewsIcon

11556

MULE ESB 的 PGP 加密和解密部分配置

引言

Mule ESB 是一个基于Java平台开发的集成框架。它允许应用程序轻松连接,并允许您在本地或云端部署。它还允许您与不同的应用程序进行通信,包括内部和外部;这些应用程序可以是您企业内部或互联网上的应用程序服务器或独立应用程序。

 

PGP (极好的隐私保护)

PGP 是一种用于加密和解密数据的机制,为数据通信提供隐私和身份验证。

 

PGP是混合密码系统。

加密

  • PGP首先压缩数据
  • 然后创建会话密钥,并使用此密钥对数据进行加密
  • 生成的会话密钥将用于加密接收者公钥,并将其与密文一起传输给接收者。

解密

  • 接收者使用私钥从副本中恢复临时会话密钥。
  • PGP负责解密常规加密的密文。

作为Mule ESB的一部分,我们可以使用PGP技术加密消息有效负载或部分有效负载。

使用公钥 分发给将使用它加密并向您发送消息的人。

使用私钥 解密您收到的使用公钥加密的消息。

背景

对MULE和PGP的基本理解

使用代码

配置

为了加密或解密消息,我们需要在Mule Flow中配置一些重要元素。此扩展程序在端点通信上添加了PGP安全性。使用PGP,您可以实现带有签名和加密的端到端安全通信。

安全管理器:安全管理器完全负责保存密钥环和要使用的加密策略。这允许使用相同的密钥加密所有消息或促进使用不同的密钥环。

密钥管理器: 负责读取密钥环。

凭证访问器:此Bean将找到要用于加密/解密正在处理的消息的密钥环和密钥管理器。

//
// <pgp:security-manager>
    <pgp:security-provider name="pgpSecurityProvider" keyManager-ref="pgpKeyManager"/>
        <pgp:keybased-encryption-strategy
        name="pgpEncryptionStrategy"
        keyManager-ref="pgpKeyManager"
        credentialsAccessor-ref="credentialAccessor"/>
</pgp:security-manager>

<spring:beans>
    <spring:bean id="pgpKeyManager" class="org.mule.module.pgp.PGPKeyRingImpl" init-method="initialise">                  
        <spring:property name="publicKeyRingFileName" value="pubring.gpg"/>
        <spring:property name="secretKeyRingFileName" value="secring.gpg"/>
        <spring:property name="secretAliasId" value="${pgp.secretAliasId}"/>
            <spring:property name="secretPassphrase" value="${pgp.secretPassphrase}"/>
    </spring:bean>

        <spring:bean id="credentialAccessor" class="com.pgp.AppCredentialAccessor">
            <spring:property name="credentials" value="${pgp.principal}"/>
        </spring:bean>  
</spring:beans>

//Java :
public class AppCredentialAccessor implements CredentialsAccessor {

    private String credentials = "pgp test (pgp) <pgptest@mulesoft.com>";

    public AppCredentialAccessor() {

    }

    public AppCredentialAccessor(String string) {
        this.credentials = string;
    }

    public String getCredentials() {
        return credentials;
    }

    public void setCredentials(String credentials) {
        this.credentials = credentials;
    }

    public Object getCredentials(MuleEvent event) {
        returnthis.credentials;
    }

    public void setCredentials(MuleEvent event, Object credentials) {
        // dummy
    }
}

安全提供程序: 用于PGP相关功能的安全提供程序

基于密钥的加密策略: 要使用的基于密钥的PGP加密策略。

keyManager-ref: 引用要使用的密钥管理器。

credentialsAccessor-ref: 引用要使用的凭证访问器。

这里,'pgpKeyManager' bean负责读取密钥(pubring、secring)。

凭证访问器: 凭证访问器是一个确定您的密钥ID的类。例如,以下类(在示例中使用)始终返回相同的固定字符串,因此所有消息将使用相同的密钥ID进行加密/解密。

用于加密的Mule Flow

<flow name="EncryptFilesFlow">
    <file:inbound-endpoint connector-ref="InputFile"
        path="<<输入文件夹位置>>" moveToDirectory="<<临时位置>>"
        moveToPattern="#[header:originalFilename].backup" transformer-refs="file2Bytes" />

    <encrypt-transformer name="pgpEncrypt" strategy-ref="pgpEncryptionStrategy" />

    <file:outbound-endpoint connector-ref="output"
        path="<<输出位置>>" outputPattern="#[function:datestamp]-#[header:originalFilename]" />
</flow>

用于解密的Mule Flow

<flow name="DecryptFilesFlow ">

    <file:inbound-endpoint connector-ref="InputFile"
        path="<<输入文件位置>>" moveToDirectory="<<输入文件位置备份>>" "
        moveToPattern="#[header:originalFilename].backup" transformer-refs="file2Bytes" />

    <decrypt-transformer name="pgpDecrypt"
        strategy-ref="pgpEncryptionStrategy" />

    <file:outbound-endpoint connector-ref="output"
        path="<<输出位置>>" outputPattern="#[function:datestamp]-#[header:originalFilename]" />

</flow>

关注点

数据转换变得容易,无需再进行编码,只需配置,并在转换数据时使数据非常安全

历史

在此处保持您所做的任何更改或改进的实时更新。

© . All rights reserved.