В большинстве случаев использования SSL используется односторонний SSL. В этих случаях сервер (будь то веб-сервер, файловый сервер, брокер сообщений и т. Д. c.) Размещает сертификат SSL, и клиент должен «доверять» этому сертификату для успешного завершения рукопожатия SSL. Обычно SSL-сертификат сервера подписывается доверенным органом (например, VeriSign , Digicert , Thawte , et c.), И клиенты неявно доверяют им. Вот как подавляющее большинство SSL делается в сети.
Однако, при использовании «самозаверяющих» сертификатов, как и вы, сертификат сервера не подписывается доверенным органом, поэтому клиент должен вручную импортировать сертификат в свое «доверенное хранилище».
С 2-сторонним (или «взаимным») SSL и сервером и клиент имеет сертификаты SSL, и сервер и клиент должны доверять сертификату другого, чтобы успешно завершить рукопожатие SSL. Этот тип конфигурации является относительно редким и обычно требуется только в средах с высокой степенью защиты, где все стороны должны установить явное доверие. Это также может быть полезно для клиентов ActiveMQ Artemis, поскольку для аутентификации могут использоваться данные сертификата вместо имени пользователя и пароля. Детали конфигурации для этого обсуждаются в документации по безопасности ActiveMQ Artemis .
Поскольку вы указали needClientAuth=true
на acceptor
в broker.xml
, вам требуется двусторонний SSL , Транспортная документация ActiveMQ Artemis гласит:
needClientAuth
Это свойство только для acceptor
. Он сообщает клиенту, подключающемуся к этому акцептору, что требуется двухсторонний SSL. Допустимые значения: true
или false
. Значение по умолчанию: false
.
Использование двухстороннего SSL может быть значительным бременем при настройке, поскольку требует работы для каждого клиента как на клиенте, так и на сервере (т.е. для генерации и импортируйте / доверяйте соответствующим сертификатам).
Конфигурация одностороннего SSL намного проще. Например, вам нужно будет только выполнить эти команды:
# Create a broker key and cert - import the keypair and cert into the broker keystore
openssl req -newkey rsa:2048 -nodes -keyout broker_keypair.pem -x509 -days 65000 -out broker_cert.pem
openssl pkcs12 -inkey broker_keypair.pem -in broker_cert.pem -export -out broker_ks.p12
# Create a truststore for the client, and import the broker's certificate. This establishes that the client "trusts" the broker:
keytool -import -alias broker -keystore client_ts.p12 -file broker_cert.pem -deststoretype pkcs12
И ваши connectors
и acceptors
будут настроены так:
<connectors>
<connector name="netty-connector">tcp://amq1:61616?sslEnabled=true;trustStorePath=client_ts.p12;trustStorePassword=artemis</connector>
</connectors>
<acceptors>
<acceptor name="netty-acceptor">tcp://amq1:61616?sslEnabled=true;keyStorePath=broker_ks.p12;keyStorePassword=artemis</acceptor>
</acceptors>