- 浏览: 55950 次
最新评论
在本章前面部分,我们描述了ActiveMQ插件被用来验证客户端和授权对destinations的访问来进行安全化。这些插件适宜的完成它们的工作,但是他们使用明文用户名和密码存储客户端证书。虽然对于大多数的用户和用例都是sufficient,一些组织倾向于通过SSL certificate实现安全化。我们已经在第4章讨论过SSL传输和它如何使用证书的。在这一节我们将关于那个material进行扩展并向你展示SSL传输(和支持插件一起)如何被用来对代理进行安全化。我们将看到不仅是我们该如何通过客户端的证书进行客户端验证,还有我们该如何基于他们连接代理使用的证书非配不同的访问权限。
举例来说在这一节我们将使用stock portfolio的publisher和consumer。就是这次,他们将使用不同的证书,这些证书将标志他们并赋予他们从代理的destination那publish和consume的权限。
6.4.1准备证书
让我们建立合适的证书。这个步骤和在第4章我们用于基本SSL传输的类似。我们提供这本书所有示例的证书,所以你能使用他们运行示例。
我们建立两个证书:一个名叫producer并被包含在myproducer.ks :
$ keytool -genkey -alias producer -keyalg RSA -keystore myproducer.ks
Enter keystore password: test123
Re-enter new password: test123
What is your first and last name? [Unknown]: producer
What is the name of your organizational unit? [Unknown]:
Chapter 6
What is the name of your organization? [Unknown]: ActiveMQ in Action
What is the name of your City or Locality? [Unknown]: Belgrade
What is the name of your State or Province? [Unknown]:
What is the two-letter country filename for this unit? [Unknown]: RS
Is CN=producer, OU=Chapter 6, O=ActiveMQ in Action,
L=Belgrade, ST=Unknown, C=RS correct? [no]: yes
Enter key password for <producer> (RETURN if same as keystore password):
并且另一个名为consumer并被存储在myconsumer.ks keystore:
$ keytool -genkey -alias consumer -keyalg RSA -keystore myconsumer.ks
Enter keystore password: test123
What is your first and last name? [Unknown]: consumer
What is the name of your organizational unit? [Unknown]: Chapter 6
What is the name of your organization? [Unknown]: ActiveMQ in Action
What is the name of your City or Locality? [Unknown]: Belgrade
What is the name of your State or Province? [Unknown]:
What is the two-letter country code for this unit? [Unknown]: RS
Is CN=consumer, OU=Chapter 6, O=ActiveMQ in Action,
L=Belgrade, ST=Unknown, C=RS correct? [no]: yes
Enter key password for <client> (RETURN if same as keystore password):
注意我们建立证书的信息,因为稍后我们将使用它去grant或deny访问代理的权限。当然在产品环境你应考虑保证证书于安全的位置来为整个系统提供更好的安全性。
6.4.2建立truststore
接下来我们需要做的是讲这些证书导入到代理的truststore。但是首先我们需要将它们从keystores中导出。使用下面的命令来导出producer keystore:
$ keytool -export -alias producer -keystore myproducer.ks \
-file producer_cert
Enter keystore password: test123
Certificate stored in file <producer_cert>
同样下面是导出consumer的keystore:
$ keytool -export -alias consumer -keystore myconsumer.ks \
-file consumer_cert
Enter keystore password: test123
Certificate stored in file <consumer_cert>
现在JMS客户端证书已经被导出了,代理的truststore必须被建立。
建立一个代理的truststore并导入producer和consumer证书是一个相当straightforward的工作。首先导入producer证书到代理的truststore:
$ keytool -import -alias producer -keystore mybroker.ts \
-file producer_cert
Enter keystore password:
Re-enter new password:
Owner: CN=producer, OU=Chapter 6, O=ActiveMQ in Action,
L=Belgrade, ST=Unknown, C=RS Issuer: CN=producer, OU=Chapter 6,
O=ActiveMQ in Action, L=Belgrade, ST=Unknown, C=RS
Serial number: 4b6f0cf0
Valid from: Sun Feb 07 19:56:48 CET 2010 until: Sat May 08
20:56:48 CEST 2010
Certificate fingerprints: MD5:
9A:8C:02:17:0D:B1:11:CB:4E:14:63:37:03:F3:31:AD SHA1:
21:3B:A8:15:B8:67:39:28:9C:1B:23:35:E9:9F:30:2C:4C:8D:16:85 Signature
algorithm name: SHA1withRSA Version: 3
Trust this certificate? [no]: yes
Certificate was added to keystore
接下来导入consumer证书到代理truststore:
$ keytool -import -alias consumer -keystore mybroker.ts \
-file consumer_cert
Enter keystore password:
Owner: CN=consumer, OU=Chapter 6, O=ActiveMQ in Action,
L=Belgrade, ST=Unknown, C=RS Issuer: CN=consumer, OU=Chapter 6,
O=ActiveMQ in Action, L=Belgrade, ST=Unknown, C=RS
Serial number: 4b6f0ed4
Valid from: Sun Feb 07 20:04:52 CET 2010 until: Sat May 08
21:04:52 CEST 2010 Certificate fingerprints: MD5:
6D:C9:AF:3C:AB:1D:E3:8A:C1:5D:70:71:DE:17:CE:95 SHA1:
73:F6:7B:E9:42:5C:90:EB:6F:4F:8C:CB:9E:DB:59:66:B0:EF:02:2E Signature
algorithm name: SHA1withRSA Version: 3
Trust this certificate? [no]:yes
Certificate was added to keystore
当代理的truststore已经就绪,我们需要将它置于我们能从配置文件中引用它的地方。这经常是${ACTIVEMQ_HOME}/conf/ 文件夹,这个文件夹下还有所有其他的配置资源。我们将通过示例提供truststore,所以你所必须做的仅是复制它到正确的位置:
$ cp src/main/resources/org/apache/activemq/book/ch6/mybroker.ts \
${ACTIVEMQ_HOME}/conf/
现在让我们focus on配置文件和我们该如何只用truststore来配置ActiveMQ安全性。
6.4.3配置代理
在下面类表中显示的XML配置文件使用提供的truststore来instruct SSL传输(通过它客户端被允许连接代理),然后使用jaasCertificateAuthenticationPlugin(以粗体显示)来授权他们对代理资源的访问。
Listing 6.7 Configuring certificate-based security
...
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.base}/data">
<plugins>
<jaasCertificateAuthenticationPlugin configuration="activemq-certificate" />
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry topic=">" read="admins" write="admins" admin="admins" />
<authorizationEntry topic="STOCKS.>" read="consumers" write="publishers" admin="publishers" />
<authorizationEntry topic="STOCKS.ORCL" read="guests" />
<authorizationEntry topic="ActiveMQ.Advisory.>" read="admins,publishers,consumers,guests" write="admins,publishers,consumers,guests" admin="admins,publishers,consumers,guests" />
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
<sslContext>
<sslContext keyStore="file:${activemq.base}/conf/mybroker.ks" keyStorePassword="test123" trustStore="file:${activemq.base}/conf/mybroker.ts" trustStorePassword="test123"/>
</sslContext>
<transportConnectors>
<transportConnector name="openwire" uri="tcp://localhost:61616"/>
<transportConnector name="ssl" uri="ssl://localhost:61617?needClientAuth=true" />
</transportConnectors>
</broker>
...
配置文件中的一些东西值得注意,已用粗体显示。首先,我们添加了trustStore和trustStorePassword属性到<sslContext>配置,这允许我们使用我们的先前定义的代理的truststore。然后,我们在SSL传输URI中设置needClientAuth属性,它将instruct代理去check连接的客户端的证书并允许那些能在truststore中找到的进行访问。
6.4.4授权解释[/b。
现在我们已经cover authentication with certificates,该来关心一下authorization了,这就是为什么我们使用jaasCertificateAuthenticationPlugin。这个插件和我们在这章早先使用的JAAS插件类似。我们现在配置它来看看在login.config中的activemq-certificate配置,它看起来应该像这样:
activemq-certificate {
org.apache.activemq.jaas.TextFileCertificateLoginModule
required debug=true
org.apache.activemq.jaas.textfiledn.user="users.properties"
org.apache.activemq.jaas.textfiledn.group="groups.properties";
};
login.config文件现在不同了,它使用TextFileCertificateLoginModule而不是PropertiesLoginModule了,被配置使用合适的属性。
现在该来看看user.properties文件长什么样了:
admin=password
publisher=password
consumer=password
guest=password
[b]
sslconsumer=CN=consumer, OU=Chapter 6, O=ActiveMQ in Action, L=Belgrade,
ST=Unknown, C=RS
sslpublisher=CN=producer, OU=Chapter 6,
O=ActiveMQ in Action, L=Belgrade, ST=Unknown, C=RS
正如你所见的,我们添加了两个证书(sslconsumer 和 sslpublisher 用户)。你可能注意到了user.properties使你映射你的证书到某个特定名字上的地方,并且我们使用合适的证书信息来映射它到desired用户名。现在我们有一个用户名,我们能使用groups.properties文件将它放到特定的组中:
admins=admin
publishers=admin,publisher,sslpublisher
consumers=admin,publisher,consumer,sslconsumer
guests=guest
一旦我们在他们的组中有我们的用户,authorizationPlugin开始生效并且授权对代理destinations的访问。
6.4.5测试
现在让我们使用先前的配置和login.config文件启动代理:
${ACTIVEMQ_HOME}/bin/activemq console \
-Djava.security.auth.login.config=\
src/main/resources/org/apache/activemq/book/ch6/login.config \
xbean:src/main/resources/org/apache/activemq/book/ch6/activemq-ssl.xml
...
Loading message broker from:
xbean:src/main/resources/org/apache/activemq/book/ch6/activemq-ssl.xml
...
00:15:26,144 | INFO | PListStore:
/Users/bsnyder/amq/apache-activemq-5.4.1/data/localhost/tmp_storage started
00:15:26,312 | INFO | Using Persistence Adapter: KahaDBPersistenceAdapter
[/Users/bsnyder/amq/apache-activemq-5.4.1/data/localhost/KahaDB]
00:15:26,387 | INFO | JMX consoles can connect to service:
jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
00:15:26,882 | INFO | KahaDB is version 2
00:15:26,905 | INFO | ActiveMQ 5.4.1 JMS Message Broker (localhost) is
starting
00:15:26,906 | INFO | For help or more information please see:
http://activemq.apache.org/
00:15:27,044 | INFO | Scheduler using directory:
/Users/bsnyder/amq/apache-activemq-5.4.1/data/localhost/scheduler
00:15:27,086 | INFO | JobSchedulerStore:
/Users/bsnyder/amq/apache-activemq-5.4.1/data/localhost/scheduler started
00:15:27,113 | INFO | Listening for connections at: tcp://localhost:61616
00:15:27,114 | INFO | Connector openwire Started
00:15:27,810 | INFO | Listening for connections at:
ssl://localhost:61617?needClientAuth=true
00:15:27,811 | INFO | Connector ssl Started
00:15:27,820 | INFO | ActiveMQ JMS Message Broker
(localhost, ID:mongoose.local-51704-1289978126925-0:0) started
...
代理准备就绪,所以让我们看看基于使用的证书客户端如何表现。例如,如果我们尝试通过使用第四章中的原始证书访问代理,我们预计访问将被拒绝,因为证书不在代理的truststore中。
$ mvn -Djavax.net.ssl.keyStore=\
src/main/resources/org/apache/activemq/book/ch4/myclient.ks \
-Djavax.net.ssl.keyStorePassword=test123 \
-Djavax.net.ssl.trustStore=${ACTIVEMQ_HOME}/conf/myclient.ts \
-Djavax.net.ssl.trustStorePassword=test123 exec:java
-Dexec.mainClass=org.apache.activemq.book.ch4.Publisher \
-Dexec.args="ssl://localhost:61617 CSCO ORCL"
...
No user for client certificate: CN=Dejan Bosanac,
OU=Chapter 4, O=ActiveMQ in Action, L=Belgrade, ST=Unknown,
C=RS
...
注意我们正从原始的SSL示例中使用客户端truststore,因为关于代理端的证书没有什么改变。
现在让我们使用合适的证书启动它并看它是如何工作的:
$ mvn -Djavax.net.ssl.keyStore=\
src/main/resources/org/apache/activemq/book/ch6/myproducer.ks \
-Djavax.net.ssl.keyStorePassword=test123 \
-Djavax.net.ssl.trustStore=${ACTIVEMQ_HOME}/conf/myclient.ts \
-Djavax.net.ssl.trustStorePassword=test123 exec:java \
-Dexec.mainClass=org.apache.activemq.book.ch4.Publisher \
-Dexec.args="ssl://localhost:61617 CSCO ORCL"
...
Sending: {price=22.67337141688392, stock=ORCL, offer=22.696044788300803,
up=true} on destination: topic://STOCKS.ORCL
Sending: {price=22.783456638853973, stock=ORCL, offer=22.806240095492825,
up=true} on destination: topic://STOCKS.ORCL
Sending: {price=35.92652907541019, stock=CSCO, offer=35.96245560448559,
up=false} on destination: topic://STOCKS.CSCO
Sending: {price=35.81608910812595, stock=CSCO, offer=35.851905197234075,
up=false} on destination: topic://STOCKS.CSCO
Sending: {price=35.49430393012775, stock=CSCO, offer=35.52979823405787,
up=false} on destination: topic://STOCKS.CSCO
Sending: {price=22.613210876407855, stock=ORCL, offer=22.63582408728426,
up=false} on destination: topic://STOCKS.ORCL
Sending: {price=22.584893337535, stock=ORCL, offer=22.607478230872534,
up=false} on destination: topic://STOCKS.ORCL
Sending: {price=35.81521985692496, stock=CSCO, offer=35.85103507678188,
up=true} on destination: topic://STOCKS.CSCO
Sending: {price=35.8020033885887, stock=CSCO, offer=35.837805391977284,
up=false} on destination: topic://STOCKS.CSCO
Sending: {price=22.570064862430183, stock=ORCL, offer=22.59263492729261,
up=false} on destination: topic://STOCKS.ORCL
Published '10' of '10' price messages
...
如预期的,这个情况下publisher成功地发送了stock portfolio更新到代理。现在让我们看看如何使用一个合适的证书启动一个consumer:
$ mvn -Djavax.net.ssl.keyStore=\
src/main/resources/org/apache/activemq/book/ch6/myconsumer.ks \
-Djavax.net.ssl.keyStorePassword=test123 \
-Djavax.net.ssl.trustStor${ACTIVEMQ_HOME}/conf/myclient.ts \
-Djavax.net.ssl.trustStorePassword=test123 exec:java \
-Dexec.mainClass=org.apache.activemq.book.ch4.Consumer \
-Dexec.args="ssl://localhost:61617 CSCO ORCL"
...
ORCL 82.20 82.28 up
CSCO 88.52 88.61 down
CSCO 89.10 89.19 up
ORCL 81.90 81.98 down
ORCL 81.16 81.24 down
CSCO 89.84 89.93 up
ORCL 81.19 81.27 up
ORCL 81.38 81.46 up
CSCO 90.14 90.23 up
ORCL 81.03 81.12 down
ORCL 80.71 80.79 down
ORCL 80.01 80.09 down
ORCL 79.51 79.59 down
CSCO 90.52 90.61 up
ORCL 79.52 79.60 up
ORCL 78.77 78.85 down
...
最终,我们能测试我们的authorization设置工作正常。正如你能从代理的配置中看到的,consumer不应被允许来发送消息到我们 stockrelated 主题。所以如果你尝试这么做,操作应该会失败:
$ mvn -Djavax.net.ssl.keyStore=\
src/main/resources/org/apache/activemq/book/ch6/myconsumer.ks \
-Djavax.net.ssl.keyStorePassword=test123 \
-Djavax.net.ssl.trustStore=${ACTIVEMQ_HOME}/conf/myclient.ts \
-Djavax.net.ssl.trustStorePassword=test123 exec:java \
-Dexec.mainClass=org.apache.activemq.book.ch4.Publisher \
-Dexec.args="ssl://localhost:61617 CSCO ORCL"
...
role="bold">User CN=consumer, OU=Chapter 6, O=ActiveMQ in Action,
L=Belgrade, ST=Unknown, C=RS is not authorized to write to:
topic://STOCKS.CSCO
...
在这一节中,我们学习了如何leverage我们所知道的关于SSL传输(和配置证书)和一点配置基于证书的安全的ActiveMQ代理。这将ActiveMQ安全性带到了完全新的等级并使它完美地满足了organization的tight安全需求。
举例来说在这一节我们将使用stock portfolio的publisher和consumer。就是这次,他们将使用不同的证书,这些证书将标志他们并赋予他们从代理的destination那publish和consume的权限。
6.4.1准备证书
让我们建立合适的证书。这个步骤和在第4章我们用于基本SSL传输的类似。我们提供这本书所有示例的证书,所以你能使用他们运行示例。
我们建立两个证书:一个名叫producer并被包含在myproducer.ks :
$ keytool -genkey -alias producer -keyalg RSA -keystore myproducer.ks
Enter keystore password: test123
Re-enter new password: test123
What is your first and last name? [Unknown]: producer
What is the name of your organizational unit? [Unknown]:
Chapter 6
What is the name of your organization? [Unknown]: ActiveMQ in Action
What is the name of your City or Locality? [Unknown]: Belgrade
What is the name of your State or Province? [Unknown]:
What is the two-letter country filename for this unit? [Unknown]: RS
Is CN=producer, OU=Chapter 6, O=ActiveMQ in Action,
L=Belgrade, ST=Unknown, C=RS correct? [no]: yes
Enter key password for <producer> (RETURN if same as keystore password):
并且另一个名为consumer并被存储在myconsumer.ks keystore:
$ keytool -genkey -alias consumer -keyalg RSA -keystore myconsumer.ks
Enter keystore password: test123
What is your first and last name? [Unknown]: consumer
What is the name of your organizational unit? [Unknown]: Chapter 6
What is the name of your organization? [Unknown]: ActiveMQ in Action
What is the name of your City or Locality? [Unknown]: Belgrade
What is the name of your State or Province? [Unknown]:
What is the two-letter country code for this unit? [Unknown]: RS
Is CN=consumer, OU=Chapter 6, O=ActiveMQ in Action,
L=Belgrade, ST=Unknown, C=RS correct? [no]: yes
Enter key password for <client> (RETURN if same as keystore password):
注意我们建立证书的信息,因为稍后我们将使用它去grant或deny访问代理的权限。当然在产品环境你应考虑保证证书于安全的位置来为整个系统提供更好的安全性。
6.4.2建立truststore
接下来我们需要做的是讲这些证书导入到代理的truststore。但是首先我们需要将它们从keystores中导出。使用下面的命令来导出producer keystore:
$ keytool -export -alias producer -keystore myproducer.ks \
-file producer_cert
Enter keystore password: test123
Certificate stored in file <producer_cert>
同样下面是导出consumer的keystore:
$ keytool -export -alias consumer -keystore myconsumer.ks \
-file consumer_cert
Enter keystore password: test123
Certificate stored in file <consumer_cert>
现在JMS客户端证书已经被导出了,代理的truststore必须被建立。
建立一个代理的truststore并导入producer和consumer证书是一个相当straightforward的工作。首先导入producer证书到代理的truststore:
$ keytool -import -alias producer -keystore mybroker.ts \
-file producer_cert
Enter keystore password:
Re-enter new password:
Owner: CN=producer, OU=Chapter 6, O=ActiveMQ in Action,
L=Belgrade, ST=Unknown, C=RS Issuer: CN=producer, OU=Chapter 6,
O=ActiveMQ in Action, L=Belgrade, ST=Unknown, C=RS
Serial number: 4b6f0cf0
Valid from: Sun Feb 07 19:56:48 CET 2010 until: Sat May 08
20:56:48 CEST 2010
Certificate fingerprints: MD5:
9A:8C:02:17:0D:B1:11:CB:4E:14:63:37:03:F3:31:AD SHA1:
21:3B:A8:15:B8:67:39:28:9C:1B:23:35:E9:9F:30:2C:4C:8D:16:85 Signature
algorithm name: SHA1withRSA Version: 3
Trust this certificate? [no]: yes
Certificate was added to keystore
接下来导入consumer证书到代理truststore:
$ keytool -import -alias consumer -keystore mybroker.ts \
-file consumer_cert
Enter keystore password:
Owner: CN=consumer, OU=Chapter 6, O=ActiveMQ in Action,
L=Belgrade, ST=Unknown, C=RS Issuer: CN=consumer, OU=Chapter 6,
O=ActiveMQ in Action, L=Belgrade, ST=Unknown, C=RS
Serial number: 4b6f0ed4
Valid from: Sun Feb 07 20:04:52 CET 2010 until: Sat May 08
21:04:52 CEST 2010 Certificate fingerprints: MD5:
6D:C9:AF:3C:AB:1D:E3:8A:C1:5D:70:71:DE:17:CE:95 SHA1:
73:F6:7B:E9:42:5C:90:EB:6F:4F:8C:CB:9E:DB:59:66:B0:EF:02:2E Signature
algorithm name: SHA1withRSA Version: 3
Trust this certificate? [no]:yes
Certificate was added to keystore
当代理的truststore已经就绪,我们需要将它置于我们能从配置文件中引用它的地方。这经常是${ACTIVEMQ_HOME}/conf/ 文件夹,这个文件夹下还有所有其他的配置资源。我们将通过示例提供truststore,所以你所必须做的仅是复制它到正确的位置:
$ cp src/main/resources/org/apache/activemq/book/ch6/mybroker.ts \
${ACTIVEMQ_HOME}/conf/
现在让我们focus on配置文件和我们该如何只用truststore来配置ActiveMQ安全性。
6.4.3配置代理
在下面类表中显示的XML配置文件使用提供的truststore来instruct SSL传输(通过它客户端被允许连接代理),然后使用jaasCertificateAuthenticationPlugin(以粗体显示)来授权他们对代理资源的访问。
Listing 6.7 Configuring certificate-based security
...
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.base}/data">
<plugins>
<jaasCertificateAuthenticationPlugin configuration="activemq-certificate" />
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry topic=">" read="admins" write="admins" admin="admins" />
<authorizationEntry topic="STOCKS.>" read="consumers" write="publishers" admin="publishers" />
<authorizationEntry topic="STOCKS.ORCL" read="guests" />
<authorizationEntry topic="ActiveMQ.Advisory.>" read="admins,publishers,consumers,guests" write="admins,publishers,consumers,guests" admin="admins,publishers,consumers,guests" />
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
<sslContext>
<sslContext keyStore="file:${activemq.base}/conf/mybroker.ks" keyStorePassword="test123" trustStore="file:${activemq.base}/conf/mybroker.ts" trustStorePassword="test123"/>
</sslContext>
<transportConnectors>
<transportConnector name="openwire" uri="tcp://localhost:61616"/>
<transportConnector name="ssl" uri="ssl://localhost:61617?needClientAuth=true" />
</transportConnectors>
</broker>
...
配置文件中的一些东西值得注意,已用粗体显示。首先,我们添加了trustStore和trustStorePassword属性到<sslContext>配置,这允许我们使用我们的先前定义的代理的truststore。然后,我们在SSL传输URI中设置needClientAuth属性,它将instruct代理去check连接的客户端的证书并允许那些能在truststore中找到的进行访问。
6.4.4授权解释[/b。
现在我们已经cover authentication with certificates,该来关心一下authorization了,这就是为什么我们使用jaasCertificateAuthenticationPlugin。这个插件和我们在这章早先使用的JAAS插件类似。我们现在配置它来看看在login.config中的activemq-certificate配置,它看起来应该像这样:
activemq-certificate {
org.apache.activemq.jaas.TextFileCertificateLoginModule
required debug=true
org.apache.activemq.jaas.textfiledn.user="users.properties"
org.apache.activemq.jaas.textfiledn.group="groups.properties";
};
login.config文件现在不同了,它使用TextFileCertificateLoginModule而不是PropertiesLoginModule了,被配置使用合适的属性。
现在该来看看user.properties文件长什么样了:
admin=password
publisher=password
consumer=password
guest=password
[b]
sslconsumer=CN=consumer, OU=Chapter 6, O=ActiveMQ in Action, L=Belgrade,
ST=Unknown, C=RS
sslpublisher=CN=producer, OU=Chapter 6,
O=ActiveMQ in Action, L=Belgrade, ST=Unknown, C=RS
正如你所见的,我们添加了两个证书(sslconsumer 和 sslpublisher 用户)。你可能注意到了user.properties使你映射你的证书到某个特定名字上的地方,并且我们使用合适的证书信息来映射它到desired用户名。现在我们有一个用户名,我们能使用groups.properties文件将它放到特定的组中:
admins=admin
publishers=admin,publisher,sslpublisher
consumers=admin,publisher,consumer,sslconsumer
guests=guest
一旦我们在他们的组中有我们的用户,authorizationPlugin开始生效并且授权对代理destinations的访问。
6.4.5测试
现在让我们使用先前的配置和login.config文件启动代理:
${ACTIVEMQ_HOME}/bin/activemq console \
-Djava.security.auth.login.config=\
src/main/resources/org/apache/activemq/book/ch6/login.config \
xbean:src/main/resources/org/apache/activemq/book/ch6/activemq-ssl.xml
...
Loading message broker from:
xbean:src/main/resources/org/apache/activemq/book/ch6/activemq-ssl.xml
...
00:15:26,144 | INFO | PListStore:
/Users/bsnyder/amq/apache-activemq-5.4.1/data/localhost/tmp_storage started
00:15:26,312 | INFO | Using Persistence Adapter: KahaDBPersistenceAdapter
[/Users/bsnyder/amq/apache-activemq-5.4.1/data/localhost/KahaDB]
00:15:26,387 | INFO | JMX consoles can connect to service:
jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
00:15:26,882 | INFO | KahaDB is version 2
00:15:26,905 | INFO | ActiveMQ 5.4.1 JMS Message Broker (localhost) is
starting
00:15:26,906 | INFO | For help or more information please see:
http://activemq.apache.org/
00:15:27,044 | INFO | Scheduler using directory:
/Users/bsnyder/amq/apache-activemq-5.4.1/data/localhost/scheduler
00:15:27,086 | INFO | JobSchedulerStore:
/Users/bsnyder/amq/apache-activemq-5.4.1/data/localhost/scheduler started
00:15:27,113 | INFO | Listening for connections at: tcp://localhost:61616
00:15:27,114 | INFO | Connector openwire Started
00:15:27,810 | INFO | Listening for connections at:
ssl://localhost:61617?needClientAuth=true
00:15:27,811 | INFO | Connector ssl Started
00:15:27,820 | INFO | ActiveMQ JMS Message Broker
(localhost, ID:mongoose.local-51704-1289978126925-0:0) started
...
代理准备就绪,所以让我们看看基于使用的证书客户端如何表现。例如,如果我们尝试通过使用第四章中的原始证书访问代理,我们预计访问将被拒绝,因为证书不在代理的truststore中。
$ mvn -Djavax.net.ssl.keyStore=\
src/main/resources/org/apache/activemq/book/ch4/myclient.ks \
-Djavax.net.ssl.keyStorePassword=test123 \
-Djavax.net.ssl.trustStore=${ACTIVEMQ_HOME}/conf/myclient.ts \
-Djavax.net.ssl.trustStorePassword=test123 exec:java
-Dexec.mainClass=org.apache.activemq.book.ch4.Publisher \
-Dexec.args="ssl://localhost:61617 CSCO ORCL"
...
No user for client certificate: CN=Dejan Bosanac,
OU=Chapter 4, O=ActiveMQ in Action, L=Belgrade, ST=Unknown,
C=RS
...
注意我们正从原始的SSL示例中使用客户端truststore,因为关于代理端的证书没有什么改变。
现在让我们使用合适的证书启动它并看它是如何工作的:
$ mvn -Djavax.net.ssl.keyStore=\
src/main/resources/org/apache/activemq/book/ch6/myproducer.ks \
-Djavax.net.ssl.keyStorePassword=test123 \
-Djavax.net.ssl.trustStore=${ACTIVEMQ_HOME}/conf/myclient.ts \
-Djavax.net.ssl.trustStorePassword=test123 exec:java \
-Dexec.mainClass=org.apache.activemq.book.ch4.Publisher \
-Dexec.args="ssl://localhost:61617 CSCO ORCL"
...
Sending: {price=22.67337141688392, stock=ORCL, offer=22.696044788300803,
up=true} on destination: topic://STOCKS.ORCL
Sending: {price=22.783456638853973, stock=ORCL, offer=22.806240095492825,
up=true} on destination: topic://STOCKS.ORCL
Sending: {price=35.92652907541019, stock=CSCO, offer=35.96245560448559,
up=false} on destination: topic://STOCKS.CSCO
Sending: {price=35.81608910812595, stock=CSCO, offer=35.851905197234075,
up=false} on destination: topic://STOCKS.CSCO
Sending: {price=35.49430393012775, stock=CSCO, offer=35.52979823405787,
up=false} on destination: topic://STOCKS.CSCO
Sending: {price=22.613210876407855, stock=ORCL, offer=22.63582408728426,
up=false} on destination: topic://STOCKS.ORCL
Sending: {price=22.584893337535, stock=ORCL, offer=22.607478230872534,
up=false} on destination: topic://STOCKS.ORCL
Sending: {price=35.81521985692496, stock=CSCO, offer=35.85103507678188,
up=true} on destination: topic://STOCKS.CSCO
Sending: {price=35.8020033885887, stock=CSCO, offer=35.837805391977284,
up=false} on destination: topic://STOCKS.CSCO
Sending: {price=22.570064862430183, stock=ORCL, offer=22.59263492729261,
up=false} on destination: topic://STOCKS.ORCL
Published '10' of '10' price messages
...
如预期的,这个情况下publisher成功地发送了stock portfolio更新到代理。现在让我们看看如何使用一个合适的证书启动一个consumer:
$ mvn -Djavax.net.ssl.keyStore=\
src/main/resources/org/apache/activemq/book/ch6/myconsumer.ks \
-Djavax.net.ssl.keyStorePassword=test123 \
-Djavax.net.ssl.trustStor${ACTIVEMQ_HOME}/conf/myclient.ts \
-Djavax.net.ssl.trustStorePassword=test123 exec:java \
-Dexec.mainClass=org.apache.activemq.book.ch4.Consumer \
-Dexec.args="ssl://localhost:61617 CSCO ORCL"
...
ORCL 82.20 82.28 up
CSCO 88.52 88.61 down
CSCO 89.10 89.19 up
ORCL 81.90 81.98 down
ORCL 81.16 81.24 down
CSCO 89.84 89.93 up
ORCL 81.19 81.27 up
ORCL 81.38 81.46 up
CSCO 90.14 90.23 up
ORCL 81.03 81.12 down
ORCL 80.71 80.79 down
ORCL 80.01 80.09 down
ORCL 79.51 79.59 down
CSCO 90.52 90.61 up
ORCL 79.52 79.60 up
ORCL 78.77 78.85 down
...
最终,我们能测试我们的authorization设置工作正常。正如你能从代理的配置中看到的,consumer不应被允许来发送消息到我们 stockrelated 主题。所以如果你尝试这么做,操作应该会失败:
$ mvn -Djavax.net.ssl.keyStore=\
src/main/resources/org/apache/activemq/book/ch6/myconsumer.ks \
-Djavax.net.ssl.keyStorePassword=test123 \
-Djavax.net.ssl.trustStore=${ACTIVEMQ_HOME}/conf/myclient.ts \
-Djavax.net.ssl.trustStorePassword=test123 exec:java \
-Dexec.mainClass=org.apache.activemq.book.ch4.Publisher \
-Dexec.args="ssl://localhost:61617 CSCO ORCL"
...
role="bold">User CN=consumer, OU=Chapter 6, O=ActiveMQ in Action,
L=Belgrade, ST=Unknown, C=RS is not authorized to write to:
topic://STOCKS.CSCO
...
在这一节中,我们学习了如何leverage我们所知道的关于SSL传输(和配置证书)和一点配置基于证书的安全的ActiveMQ代理。这将ActiveMQ安全性带到了完全新的等级并使它完美地满足了organization的tight安全需求。
发表评论
文章已被作者锁定,不允许评论。
-
三次样条曲线
2014-04-11 17:33 1866原文地址: http://www.math ... -
APPLE PUBLIC SOURCE LICENSE (APSL)
2013-05-23 13:47 0原文地址:http://www.publicsource.ap ... -
翻译的一些说明
2013-03-07 14:48 0翻译的一些说明: 1,对于一些专有名词如speex,api不过 ... -
ALSA driver 安装指南(中文版)
2012-12-29 11:28 0ALSA 驱动替代了OSS/Free驱动。从版本0.4.0开始 ... -
ALSA driver 安装指南(英文版)
2012-12-28 14:30 0Advanced Linux Sound Architectu ... -
Addons
2013-01-08 10:37 1023Addons是动态链接共享对象。它们能提供和c及c++库的粘合 ... -
8.4和Apache Geronimo集成
2013-04-16 20:01 1548Apache Geronimo应用服务器是在应用服务器许多方面 ... -
8.3和Jetty集成
2013-04-16 19:58 1121Jetty web container已经存在了很长时间并使可 ... -
8.2和Apache Tomcat集成
2013-03-11 21:54 1499Apache Tomcat是可论证的当今使用最广的可用的Jav ... -
8.1web应用示例
2013-03-11 21:54 11158.1web应用示例 为了在本章中演示集成示例,一个web应用 ... -
8.0将ActiveMQ集成到应用服务器
2013-03-11 21:54 957本章包括下面内容: ■ ... -
7.5小结
2013-03-11 21:53 627在本章中,你已经看到了ActiveMQ如何能被看做不仅是一个独 ... -
7.4使用Spring编写JMS客户端
2013-03-11 21:53 1481ActiveMQ使用Spring框架来ease client- ... -
7.3实现request/reply with JMS
2012-12-07 16:12 1482如前面章节中描述的,m ... -
7.2使用Spring嵌入ActiveMQ
2012-12-06 15:01 1677ActiveMQ is developed with Spri ... -
7.1使用Java嵌入ActiveMQ
2012-12-05 15:59 2003虽然今天的大多数开发者使用一个框架编写他们的应用,但是用最简单 ... -
7.0建立带ActiveMQ的Java程序
2012-12-05 13:47 1083本章包括: ■在Java应用程序中嵌入ActiveMQ ■使用 ... -
6.5总结
2012-12-05 11:33 725在这一章中,ActiveMQ被从无身份验证no-authent ... -
ActiveMQ in action 1~4章
2012-11-27 16:25 848http://jfires.iteye.com/ -
6.3建立定制安全插件
2012-11-27 17:27 1421至今这章关注于ActiveMQ ...
相关推荐
ServU支持多种FTP协议变体,包括FTP本身、FTPS(FTP over SSL/TLS,提供安全加密连接)和SFTP(SSH File Transfer Protocol,基于SSH的安全文件传输)。 该6.4.0.2版本可能包含以下特性: 1. 用户管理:允许创建多...
这些证书由受信任的证书颁发机构(CA)签发,确保用户在访问网站、安装软件或进行安全通信时,能验证对方的身份。当系统中的根证书出现问题或者缺失,可能会导致各种安全警告,甚至阻止关键软件如.NET Framework 4.6...
"FGT-6.4"指的是使用FortiOS 6.4版本的FortiGate设备,这是Fortinet提供的一个先进的安全操作系统,提供了广泛的安全服务和功能。 在NSE4的认证考试中,考生需要达到800分才能通过,考试时间为120分钟。VCEplus提供...
通过这些步骤,你将在CentOS 6.4上成功搭建起一个基于EMOS 1.6的邮件系统,结合Postfix和Courier-Authlib的MySQL支持,为用户提供安全、稳定的邮件服务。请务必按照步骤进行,并根据你的具体环境进行适当调整。
在RHEL 6.4操作系统环境下,搭建...不过,请注意,由于RHEL 6.4已经过期,建议升级到更现代的版本,如RHEL 8,以获取更好的安全性和支持。同时,为了保持系统的安全,务必定期更新软件和打补丁,以防范潜在的安全威胁。
- 完全内容检查、代理基础检查和证书检查不适用于基于政策的NGFW模式。 ### FortiGate上IPSec认证的正确做法 IPSec是一个协议套件,用于在IP网络上安全通信,使用加密和认证来确保通信安全。FortiGate设备上的...
《Windows Server 2003系统安全管理》以Windows Server 2003操作系统为背景,详细地阐述了Windows Server 2003系统本身,以及基于该系统应用的安全设置,并给出了相应的完全解决方案,从而最大限度地确保系统能够...
本篇文章将基于《信息安全技术 网关安全技术要求》(GA/T 681—2007)这一标准,详细介绍网关安全的重要概念、技术要求以及实施方法。 #### 2. 范围 本标准主要规定了网关产品的安全技术要求,包括标识和鉴别、...
5.4 移植基于JDK1.1的安全管理器 97 5.4.1 JDK1.1安全管理器类 97 5.4.2 使JDK1.1安全管理器 适应JDK1.2 98 5.4.3 为JDK1.2而改进JDK1.1 安全管理器 100 第6章 对象的安全 106 6.1 安全异常 106 6.2 域和方法 107 ...
目前,在USB安全钥领域已经有许多研究成果,例如不同类型的密码体制(如DES、RSA等)、多种认证协议(如基于X.509证书的身份认证协议等),以及不同架构的USB安全钥芯片设计。这些研究成果为本研究提供了丰富的参考...
### 数据校验 #### 规则1.1:校验跨信任边界传递的不可信数据 **要点**:确保在不同信任级别的系统组件之间传递的数据是经过适当验证和清理的。...#### 规则7.3:基于哈希算法的口令安全存储必须加入盐值(salt...
- 起重指挥:遵循拆除顺序,准确估算重量和重心,吊索安全系数不低于6.4。 - 吊机操作:吊运配合过程中,司机应坚守岗位,特别是在组件脱离时操作需缓慢。 - 动火作业:拆除时如有割焊需求,需清除易燃物并配备...
5.4 移植基于JDK1.1的安全管理器 97 5.4.1 JDK1.1安全管理器类 97 5.4.2 使JDK1.1安全管理器 适应JDK1.2 98 5.4.3 为JDK1.2而改进JDK1.1 安全管理器 100 第6章 对象的安全 106 6.1 安全异常 106 6.2 域和方法 107 ...
支持更加安全的FIPS 140-2 验证加密模块(证书编号:1747). Anti-Hammering 可以有效地防止黑客的密码猜测, 保护你的服务器. 访问IP限制 你可以添加IP访问规则来屏蔽来自某些IP地址的连接. 账户过期时间 可以设置...
为了充分发挥S7_F_Systems_V6.1的功能,用户需要掌握相应的安全编程规范和实践,如使用SafeLOGIC进行安全逻辑设计,以及通过Safety相关的证书培训提升安全意识。此外,定期进行系统维护和更新,确保软件和硬件的兼容...
本配置说明基于以下测试环境: - 操作系统:CentOS 6.4 - Web服务器:Nginx 1.2.6 - 负载均衡器:HAProxy - SSL加密处理:Stunnel #### 三、生成数字证书申请(CSR) 1. **安装OpenSSL** 在CentOS 6.4上,首先...
- **椭圆曲线加密(ECC)**:一种基于椭圆曲线数学特性的加密算法,常用于安全广播系统中。 #### 五、安全广播系统构成 安全广播系统由多个组件组成,包括但不限于安全广播前端子系统、安全广播信息生成模块、复用...
IEC 61511是基于IEC 61508为过程工业制定的具体应用标准,主要用于指导过程工业领域内的功能安全实施。 #### 五、风险的容忍度 IEC 61508考虑到了不同行业的特定需求,因此在风险容忍度上有所区别,以适应不同应用...
**6.4 配置RoundcubeMail配置插件** - **启用插件**: 在RoundcubeMail中启用必要的插件,如联系人管理、日历等。 - **个性化设置**: 自定义RoundcubeMail的主题和布局。 #### 七、配置SMTP/POP3/HTTP的TLS功能 **...