最近工作中需要创建私有化的ssl签名证书,以前使用的都是申请的免费的,没有了解过这方面的信息,经过查阅各种资料,加上数次测试,终于搞定了,一起来看看吧
自签名证书是未经公共或私有证书颁发机构签名的 SSL/TSL 证书。相反,它由创建者自己的个人或根 CA 证书签名。
这里借用一下大哥uncle的巨作,一篇文章了解数字证书
此处从https://devopscube.com/create-self-signed-certificates-openssl/借图
此处从https://devopscube.com/create-self-signed-certificates-openssl/借图
openssl
来保存所有生成的密钥和证书mkdir openssl && cd openssl
rootCA.key 和
rootCA.crt
。替换demo.mlopshub.com
为自己的域名或 IP 地址。openssl req -x509 \
-sha256 -days 356 \
-nodes \
-newkey rsa:2048 \
-subj "/CN=demo.mlopshub.com/C=US/L=San Fransisco" \
-keyout rootCA.key -out rootCA.crt
这里有可能报错:Can't load /home/vagrant/.rnd into RNG
解决办法:
cd /root
openssl rand -writerand .rnd
现在创建好的是所有设备上的 CA,也就是根CA,我们可以为任何需要 HTTPS 的新开发站点或者应用程序签署证书
openssl genrsa -out server.key 2048
/*
创建一个csr.conf文件以包含生成 CSR 的所有信息。替换127.0.0.1为自己的域名或 IP 地址
也可以不指定配置文件,直接生成的时候手动填写
这些问题的答案并不重要.他们在查看证书时出现.但是我们几乎不需要查看证书
证数各参数含义如下:
C-----国家(Country Name)
ST----省份(State or Province Name)
L----城市(Locality Name)
O----公司(Organization Name)
OU----部门(Organizational Unit Name)
CN----产品名(Common Name)
emailAddress----邮箱(Email Address)
req_distinguished_name :根据情况进行修改
alt_names: 127.0.0.1修改为 EMQ X 服务器实际的 IP 或 DNS 地址,例如:IP.1 = 127.0.0.1,或 DNS.1 = broker.xxx.com
*/
cat > csr.conf <<EOF
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
[ dn ]
C = US
ST = California
L = San Fransisco
O = MLopsHub
OU = MlopsHub Dev
CN = 127.0.0.1
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
IP.1 = 127.0.0.1
EOF
openssl req -new -key server.key -out server.csr -config csr.conf
csr.conf
,server.csr
和server.key
1.创建配置文件
//127.0.0.1修改为 EMQ X 服务器实际的 IP 或 DNS 地址,例如:IP.1 = 127.0.0.1,或
//DNS.1 = broker.xxx.com
cat > cert.conf <<EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
IP.1 = 127.0.0.1
EOF
2.使用自签名 CA 生成 SSL 证书
openssl x509 -req \
-in server.csr \
-CA rootCA.crt -CAkey rootCA.key \
-CAcreateserial -out server.crt \
-days 365 \
-sha256 -extfile cert.conf
上面的命令将生成server.crt
将与我们server.key
一起用于在应用程序中启用 SSL
到此为止,根CA还有服务端数字证书和私钥就创建完毕了,当然也可以使用此根CA为多个客户端生成client.crt和client.key 这样的话如果客户端需要使用双向认证直接安装上就可以了
#! /bin/bash
if [ "$#" -ne 1 ]
then
echo "Error: No domain name argument provided"
echo "Usage: Provide a domain name as an argument"
exit 1
fi
DOMAIN=$1
# Create root CA & Private key
openssl req -x509 \
-sha256 -days 356 \
-nodes \
-newkey rsa:2048 \
-subj "/CN=${DOMAIN}/C=US/L=San Fransisco" \
-keyout rootCA.key -out rootCA.crt
# Generate Private key
openssl genrsa -out ${DOMAIN}.key 2048
# Create csf conf
cat > csr.conf <<EOF
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
[ dn ]
C = US
ST = California
L = San Fransisco
O = MLopsHub
OU = MlopsHub Dev
CN = ${DOMAIN}
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = ${DOMAIN}
DNS.2 = www.${DOMAIN}
IP.1 = 192.168.1.5
IP.2 = 192.168.1.6
EOF
# create CSR request using private key
openssl req -new -key ${DOMAIN}.key -out ${DOMAIN}.csr -config csr.conf
# Create a external config file for the certificate
cat > cert.conf <<EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = ${DOMAIN}
EOF
# Create SSl with self signed CA
openssl x509 -req \
-in ${DOMAIN}.csr \
-CA rootCA.crt -CAkey rootCA.key \
-CAcreateserial -out ${DOMAIN}.crt \
-days 365 \
-sha256 -extfile cert.conf
chmod +x ssl.sh
./ssl.sh 127.0.0.1
/**
将serve.key 文件rootCA.crt文件及 serve.crt 文件拷贝到 EMQ X 的 etc/certs/ 目录下,并参考如下配置修改 emqx.conf:
emqx配置文件位置默认是:/emqx/etc/emqx.conf
*/
## listener.ssl.$name is the IP address and port that the MQTT/SSL
## Value: IP:Port | Port
listener.ssl.external = 8883
## Path to the file containing the user's private PEM-encoded key.
## Value: File
listener.ssl.external.keyfile = etc/certs/serve.key
## Path to a file containing the user certificate.
## Value: File
listener.ssl.external.certfile = etc/certs/serve.crt
## Path to the file containing PEM-encoded CA certificates. The CA certificates
## are used during server authentication and when building the client certificate chain.
##
## Value: File
listener.ssl.external.cacertfile = etc/certs/rootCA.crt
重启emqx之后就可以使用mqtt客户端链接工具测试链接
推荐使用emqx官方工具MQTTX
具体配置详情参考文档
链接成功后可以在emqx dashboard中看到
当然,客户端链接的时候需要服务器对外暴露该端口
好了,到这里就结束了,期间也是查阅了国内外各种文档,当然也有很多现成的写好的openssl生成证书教程.但是执行的时候总是这里错,那里错,还是自身知识储备量太少了,索性把自己试过,可行的方式记录下来.有如果有看不懂的地方,欢迎在评论区区交流.我是路北.我为自己带盐.
文章浏览阅读9.9k次,点赞4次,收藏44次。1.评论框及评论内容展示模板如下: div id="comment"> h3>strong>发表评论:strong>h3> p>span>标题:span> input type="text" name="" id="comm_title" class="text">p> p>span>内容:span>textarea rows="10"_在页面中输入你的评论,单击“评论”按钮,如果留言区没有评论,则直接添加评论,如果
文章浏览阅读1.2k次。一 什么是mitmproxy 抓包工具2 mitmproxy抓包工具介绍pip install mitmproxy检测是否安装成功mitmproxy --version默认监听 8080端口,使用 -p 指定端口3 下载证书linux 中操作mitmproxytab 切换显..._mitm框架
文章浏览阅读1.7k次。一般情况使用c:out和el表达式的效果是一样的,如: hello(使用标签):hello(使用el表达式):${hello}那一般什么时候会使用c:out标签呢?有两种情况: (1)使用缺省值。有的时候某个东西没设值,但要输出缺省值,如果用el表达式什么都不输出,但可以使用c:out输出想要输出的缺省值;如下: hello(default="123"):这样就输出了想要输出的_jstl c:out输出有小数点
文章浏览阅读261次。问题项目中数据库表对应实体类中包含Date类型的数据,保存Date类型数据时,传入的参数是new Date()(获取当前时间),但是在保存操作成功以后,在数据库中查看发现实际保存的时间比当前时间快解决最后发现是连接数据库的url中的时区参数是serverTimezone=UTC,把时区改成serverTimezone=GMT%2b8,问题解决..._jpa mysql 时间大小比较
文章浏览阅读103次。为什么80%的码农都做不了架构师?>>> ..._hotspot lir
文章浏览阅读5.8k次。在大数据的发展当中,大数据技术生态的组件,也在不断地拓展开来,而其中的Hive组件,作为Hadoop的数据仓库工具,可以实现对Hadoop集群当中的大规模数据进行相应的数据处理。今天我们的大数据入门分享,就主要来讲讲,Hive应用场景。关于Hive,首先需要明确的一点就是,Hive并非数据库,Hive所提供的数据存储、查询和分析功能,本质上来说,并非传统数据库所提供的存储、查询、分析功能。Hive..._hive应用场景
文章浏览阅读669次,点赞13次,收藏8次。嵌入式固件加密的几种方式_固件加密
文章浏览阅读1.2k次。1.Manifest文件中申请读写外部的权限<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>2.高版本的需要动态申请权限int checkReadExternalPermission = checkSelfPermission(_不root 通讯录 存放目录
文章浏览阅读502次。)创建成功之后在表中添加信息:项目创建完毕的初始目录:初始pom.xml文件:4.创建核心配置文件(mybatis-condig.xml)4.1 准备数据库配置文件(db.properties)4.2 配置mybatis-condig.xml5.建包这里需要注意:在resources资源包下创建的是directory,创建方式为:实体类的属性要和数据库里面表的字段相对应,数据类型采用包装类。7.创建Xxxmapper接口(mapper)接口中定义对数据库进行操作的方法:8_使用mybatis的开发步骤
文章浏览阅读113次。1,三方协议:学校,个人,公司 ,三方的一个协议,作用 1,学校在统计就业率 会用到这个 凭证,2,国家为了让更多的毕业大学生找到工作(出发点很好)2,档案:一般会有三种状态,1,公司有权限管理,放在公司;2,放在 你工作城市的地方(有权限管理的地方,比如人力资源保障局什么玩意的)3,放在学校所在城市的地方(同上)4,打回原籍,你从那个山格拉里面出生的(当然也是一个有管理档案权限的地方,一般市..._职业学校三方协议 工龄
文章浏览阅读5.2k次,点赞2次,收藏15次。因为公司配置设备时没有购买网络行为管理,只有防火墙设备,但因为版本问题没法实现流量的管理这两天通telnet远程登陆至交换机,查看到相当多的下载、视频流量,因此想在交换机的相应端口进行速度的限制,结果出现了些小问题:根据华为的配置命令,输入如下:system-view[Quidway]inter gigabitethernet 0/0/1[Quidway -inter gigabitetherne..._华为s5720交换机对端口进行限速
文章浏览阅读2.3k次。目标检测简介、评估标准、经典算法_目标检测