zoukankan      html  css  js  c++  java
  • ActiveMQ 认证与授权

    使用ActiveMQ自带simpleAuthenticationPlugin

    1.直接将用户名密码写入activemq.xml文件

    <plugins>
         <simpleAuthenticationPlugin>
                <users>
                      <authenticationUser username="username" password="password" groups="users, admins" />
                </users>
         </simpleAuthenticationPlugin>
     </plugins>
    

    2.使用credentials.properties存储明文凭证

    <plugins>
         <simpleAuthenticationPlugin>
               <users>
                    <authenticationUser username="${activemq.username}" password="${activemq.password}" groups="users, admins" />
               </users>
         </simpleAuthenticationPlugin>
    </plugins>
    
    vim credentials.properties
        activemq.username=username
        activemq.password=password
    

    activemq.xml 顶部导入了file:${activemq.conf}/credentials.properties,我们可以使用变量的方式引用该文件内部的属性
    groups="users, admins" 表示定义用户所属的用户组, activemq按照用户组分配权限,注意不能删除groups属性,可以置空

    3.使用credentials-enc.properties存储加密凭证

    ActiveMQ允许我们对凭证加密后存储在配置文件中,虽然更加安全但也麻烦一些,这里根据实验结果对官方文档给出的方法进行梳理

    # --- 创建加密凭证
    bin/activemq encrypt --password activemq --input password
    # --password 凭证加密密码 --input 凭证原文
    # 返回内容:
    # ...
    # Encrypted text: FJnN6inNmqDigYEs4wDgkwbe3l2B7mQr
    # 解密过程相反,但要输入相同的凭证加密密码
    bin/activemq decrypt  --password activemq --input FJnN6inNmqDigYEs4wDgkwbe3l2B7mQr
    # 返回内容:
    # ...
    # Decrypted text: password
    
    # --- 将加密凭证写入credentials-enc.properties
    activemq.username=admin
    activemq.password=ENC(FJnN6inNmqDigYEs4wDgkwbe3l2B7mQr)
    # 格式上注意使用ENC()包裹加密凭证
    
    # --- 修改activemq.xml顶部的配置导入部分
        <!-- Allows us to use system properties as variables in this configuration file -->
        <!-- <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations">
                <value>file:${activemq.conf}/credentials.properties</value>
            </property>
        </bean> -->
    
        <bean id="environmentVariablesConfiguration" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
            <property name="algorithm" value="PBEWithMD5AndDES" />
            <property name="passwordEnvName" value="ACTIVEMQ_ENCRYPTION_PASSWORD" />
        </bean>
    
        <bean id="configurationEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
            <property name="config" ref="environmentVariablesConfiguration" />
        </bean>
    
        <bean id="propertyConfigurer" class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer">
            <constructor-arg ref="configurationEncryptor" />
            <property name="location" value="file:${activemq.base}/conf/credentials-enc.properties"/>
        </bean>
    # 注释掉原有的credentials.properties导入部分,新增三个bean,三个bean的意思是从环境变量ACTIVEMQ_ENCRYPTION_PASSWORD中加载凭证加密密码,然后对credentials-enc.properties中的加密凭证解密,所以启动mq之前还需要设置环境变量。
    # 也可以直接将加密密码写在配置文件中:
        <!-- Allows us to use system properties as variables in this configuration file -->
        <!-- <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations">
                <value>file:${activemq.conf}/credentials-enc.properties</value>
            </property>
        </bean> -->
    
        <bean id="configurationEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
            <property name="algorithm" value="PBEWithMD5AndDES"/>
            <property name="password" value="activemq"/>
        </bean>
    
        <bean id="propertyConfigurer" class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer">
            <constructor-arg ref="configurationEncryptor" />
            <property name="location" value="file:${activemq.base}/conf/credentials-enc.properties"/>
        </bean>
    # 将原来三个bean中前两个替换成新的bean
    
    # --- 启动MQ实例
    # 如果采用环境变量方式存储凭证加密密码,那么这里要设置一下
    export ACTIVEMQ_ENCRYPTION_PASSWORD=activemq
    bin/activemq start
    unset ACTIVEMQ_ENCRYPTION_PASSWORD
    # 如果直接将凭证加密密码写入配置文件,那么这里直接启动实例即可
    

    安全这件事强调一万遍也不为过,但如果可以攻破服务器直接看到配置文件的话那问题一定不是MQ的。

    使用JAASAuthentication Plugin

    JAAS 全称为Java Authentication and Authorization Service JAVA认证授权服务
    JAASAuthentication Plugin依赖标准的JAAS机制来实现认证,默认使用login.config文件作为配置

    vim login.config
    activemq {
        org.apache.activemq.jaas.PropertiesLoginModule required
            org.apache.activemq.jaas.properties.user="users.properties"
            org.apache.activemq.jaas.properties.group="groups.properties";
    };
    

    login.config配置中引用了users.properties和groups.properties分别进行用户名密码和用户组配置

    vim users.properties
        username=password
    vim groups.properties
        groups=username1, username2...
    

    在activemq.xml添加JAASAuthentication Plugin配置

    <plugins>
        <jaasAuthenticationPlugin configuration="activemq" />
    </plugins>
    

    configuration="activemq" 指向login.config中配置的名称

    使用authorizationPlugin进行授权

    activemq可以对Queue,Topic的读写创建等进行权限控制,权限按照用户组分配

    <plugins>
        <authorizationPlugin>
                <map>
                      <authorizationMap>
                           <authorizationEntries>
                                <authorizationEntry queue="activemq.>" read="users" write="users" admin="users"/>
                                <authorizationEntry topic="USER.>" read="admins" write="admins" admin="admins"/>
                           </authorizationEntries>
                       </authorizationMap>
                 </map>
        </authorizationPlugin>
    </plugins>
    

    > 表示通配符 上述配置表明只有users组才能读写创建activemq.开头的队列,只有admins组才能读写创建USER.开头的主题
    值的注意的是,"activemq.>"中通配符前的点符号必须存在否则无法生效,也就是说前缀必须以点号结尾
    > 也可用 * 替换

  • 相关阅读:
    堆和栈究竟有什么区别?
    堆和栈的区别
    POJ 1528问题描述
    Facial Detection and Recognition with opencv on ios
    10个免费学习编程的好地方
    目标检测的图像特征提取之(一)HOG特征
    行人检测综述
    Introduction to Face Detection and Face Recognition
    opencv hog+svm行人检测
    苹果检测
  • 原文地址:https://www.cnblogs.com/Peter2014/p/10981986.html
Copyright © 2011-2022 走看看