SASL/PLAIN 是一种简单的用户名/密码认证机制。 Kafka 支持 SASL/PLAIN 的默认实现,下面将详细描述如何为Kafka配置SASL/PLAIN。
/home/chen/kafka_2.12-0.11.0.0/config,后文将使用{KAFKA_HOME}代表/home/chen/kafka_2.12-0.11.0.0)添加一个经过适当修改的 JAAS 文件,类似于下面的文件,我们将其命名为 kafka_server_jaas.conf 以用于本示例:KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret"
user_alice="alice-secret";
};
此配置定义了两个用户(admin 和 alice)。 KafkaServer中的属性username和password由Broker用于启动与其他Broker的连接。 在本例中,admin 是Broker间通信的用户。 属性集 user_username 定义了连接到Broker的所有用户的密码,Broker使用这些属性验证所有客户端连接,包括来自其他Broker的连接。
export KAFKA_OPTS="-Djava.security.auth.login.config={KAFKA_HOME}/config/kafka_server_jaas.conf"
server.properties 中配置 SASL 端口和 SASL 机制。 例如:listeners=SASL_PLAINTEXT://{server_host}:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
TODO
TODO
为简单起见,我们将只设置一个代理和客户端,但我们还将在此过程中记录您需要为更复杂的配置做什么。
在您完成这些说明时,您需要多次指定代理 {server_hostname} 和客户端 {client_hostname} 机器的名称。 理想情况下,您将使用机器的完全限定域名 (Fully Qualified Domain Name, FQDN),但如果您尚未为机器分配主机名,则可以使用 IP 地址。 如果您只是在进行试验,并且打算在同一台机器上运行代理和客户端,那么两者都使用 localhost 或 127.0.0.1 也是可以的。
步骤:
第一步:为代理创建私钥/公钥证书对:
注意:您需要对集群中的每个代理重复此步骤。
注意:我们使用 Java 附带的 keytool 实用程序来执行此任务,因为它根据代理的要求将生成的密钥/证书对存储在 JKS 容器中。
keytool -keystore server.keystore.jks -alias {server_hostname} -validity 365 -genkey -keyalg RSA
这将:
在当前目录中创建一个新的密钥库 server.keystore.jks。
提示您输入密码以保护密钥库。
生成新的公钥/私钥对并提示您输入制作公钥证书所需的其他信息。 总的来说,此信息称为可分辨名称 (Distinguishing Name, DN)。
{server_hostname}。 其他信息对于我们的目的均不重要。-dname 参数设置 DN,如下所示: -dname "cn={server_hostname}"
将私钥和自签名公钥证书存储在密钥库文件中的别名 {server_hostname} 下。
-storepass 和 -keypass 命令行参数设置密码。例如,我的{server_hostname}为kago,那么在我机器上执行的命令实际为:
keytool -keystore server.keystore.jks -alias kago -validity 365 -genkey -keyalg RSA -dname "CN=kago, OU=IT, O=Redisant, L=XIAN, ST=SHANXI, C=CN"
第二步:创建证书颁发机构 (CA) 私钥/根证书:
重要提示:不要试图通过使用自签名证书(避免使用 CA)来简化配置过程 - 这不安全(容易受到中间人攻击)。
openssl req -nodes -new -x509 -keyout ca-root.key -out ca-root.crt -days 365
或者也可以生成.pem格式的证书
openssl req -nodes -new -x509 -keyout ca-root.key -out ca-root.pem -days 365
这将:
提示您输入 DN 信息以放入证书。 对于我们的目的,这些都不是必需的,但是,您可以使用 -subj 命令行参数来避免提示。 例如:-subj "/C=CN/ST=SHANXI/L=CHANGAN/O=Redisant/CN=Redisant"
创建一个私钥/自签名公钥证书对,其中私钥不受密码保护。
如果您想用密码保护私钥,请省略 -nodes 标志,系统将提示您输入密码。
例如,在我的机器上,这一步实际执行的命令为:
openssl req -new -x509 -keyout ca-root.key -out ca-root.crt -days 365 -subj "/C=CN/ST=SHANXI/L=CHANGAN/O=Redisant/CN=Redisant"
第三步:签署Broker公钥证书:
keytool -keystore server.keystore.jks -alias {server_hostname} -certreq -file {server_hostname}_server.csr
openssl x509 -req -CA ca-root.crt -CAkey ca-root.key -in {server_hostname}_server.csr -out {server_hostname}_server.crt -days 365 -CAcreateserial
keytool -keystore server.keystore.jks -alias CARoot -import -noprompt -file ca-root.crt
keytool -keystore server.keystore.jks -alias {server_hostname} -import -file {server_hostname}_server.crt
最后一步:配置Broker代理和客户端
您现在拥有配置代理和客户端所需的一切。
Broker配置:
listeners=PLAINTEXT://{server_hostname}:9092,SSL://{server_hostname}:9093
ssl.keystore.location=/path/to/keystore/file/server.keystore.jks
ssl.keystore.type=JKS
ssl.keystore.password=test1234
ssl.key.password=test1234
Kafka Assistant客户端配置:
注意,如果您创建的是ca-root.pem格式的证书,需要转换成.crt格式,Kafka Assistant才能识别:
openssl x509 -in ca-root.pem -out ca-root.crt
步骤:
第一步:为客户端创建私钥/公钥证书对
Kafka Assistant客户端不是基于 Java 的,因此不使用 Java 的 JKS 容器格式来存储私钥和证书。 我们将使用 openssl 为客户端创建密钥/证书对,而不是像我们为代理创建的 keytool。
第一步是创建证书签名请求 (CSR)。 注意:不需要像我们为代理所做的那样首先显式创建自签名证书。
openssl req -newkey rsa:2048 -nodes -keyout {client_hostname}_client.key -out {client_hostname}_client.csr
这将提示您输入一组标准公钥证书字段值,这些对于我们的目的并不重要。
您还将被提示输入密码。 您可以在此处输入空白密码,或设置密码。
现在您有了 CSR,您可以生成 CA 签名证书,如下所示:
openssl x509 -req -CA ca-root.crt -CAkey ca-root.key -in {client_hostname}_client.csr -out {client_hostname}_client.crt -days 365 -CAcreateserial
第二步:创建一个包含 ca-root.crt 的信任库
代理现在需要访问 CA 根证书,以检查客户端提供的证书的有效性。 创建包含 CA 根证书的信任库(另一个 JKS 容器文件),如下所示:
keytool -keystore server.truststore.jks -alias CARoot -import -file ca-root.crt
第三步:配置代理和客户端
代理配置:
listeners=PLAINTEXT://{server_hostname}:9092,SSL://{server_hostname}:9093
ssl.keystore.location=/path/to/keystore/file/server.keystore.jks
ssl.keystore.type=JKS
ssl.keystore.password=test1234
ssl.key.password=test1234
ssl.truststore.location=/path/to/truststore/file/server.truststore.jks
ssl.truststore.type=JKS
ssl.truststore.password=test1234
ssl.client.auth=required
Kafka Assistant客户端配置:
TODO
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配
1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模
我是ruby的新手,正在配置IRB。我喜欢pretty-print(需要'pp'),但总是输入pp来漂亮地打印它似乎很麻烦。我想做的是默认情况下让它漂亮地打印出来,所以如果我有一个var,比如说,'myvar',然后键入myvar,它会自动调用pretty_inspect而不是常规检查。我从哪里开始?理想情况下,我将能够向我的.irbrc文件添加一个自动调用的方法。有什么想法吗?谢谢! 最佳答案 irb中默认pretty-print对象正是hirb被迫去做。Theseposts解释hirb如何将几乎所有内容转换为ascii表。虽
我想在IRB中浏览文件系统并让提示更改以反射(reflect)当前工作目录,但我不知道如何在每个命令后进行提示更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中试过这个:require'fileutils'includeFileUtilsIRB.conf[:PROMPT][:CUSTOM]={:PROMPT_N=>"\e[1m:\e[m",:PROMPT_I=>"\e[1m#{pwd}>\e[m",:PROMPT_S=>"FOO",:PROMPT_C=>"\e[1m#{pwd}>\e[m",:RETURN=>""}IRB.conf[:PROMPT_MO
我正在使用Ruby/Mechanize编写一个“自动填写表格”应用程序。它几乎可以工作。我可以使用精彩CharlesWeb代理以查看服务器和我的Firefox浏览器之间的交换。现在我想使用Charles查看服务器和我的应用程序之间的交换。Charles在端口8888上代理。假设服务器位于https://my.host.com。.一件不起作用的事情是:@agent||=Mechanize.newdo|agent|agent.set_proxy("my.host.com",8888)end这会导致Net::HTTP::Persistent::Error:...lib/net/http/pe
我正在尝试在ruby脚本中连接到服务器https://www.xpiron.com/schedule。但是,当我尝试连接时:require'open-uri'doc=open('https://www.xpiron.com/schedule')我收到以下错误消息:OpenSSL::SSL::SSLError:SSL_connectreturned=1errno=0state=SSLv2/v3readserverhelloA:sslv3alertunexpectedmessagefrom/usr/local/lib/ruby/1.9.1/net/http.rb:678:in`conn
我正在使用Rails3.2.6和Stipe进行支付。是否有可能在不购买ssl证书的情况下进行付款。我可以使用Stripe页面作为我的支付页面吗? 最佳答案 您可以使用stripe.js在技术上跳过SSL但我强烈建议您设置SSL。它所做的是将信用卡信息直接传递给stripe,然后stripe会给你一个token,用于实际进行收费。这样做意味着信用卡信息永远不会接触您的服务器,您不必担心PCI合规性。但是,您仍应设置SSL以防止中间人攻击。您可以在https://stripe.com/docs/tutorials/forms找到有关如何