OPENSSL-CA

一、OpenSSL简单介绍

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。SSL能使用户/服务器应用之间的通信不被攻击者q听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。

通过OpenSSL提供FTP+SSL/TLS认证功能,并实现安全数据传输 http://www.linuxidc.com/Linux/2013-05/84986.htm

Linux下使用OpenSSL生成证书 http://www.linuxidc.com/Linux/2015-05/117034.htm

利用OpenSSL签署多域名证书 http://www.linuxidc.com/Linux/2014-10/108222.htm

在OpenSSL中添加自定义加密算法 http://www.linuxidc.com/Linux/2015-08/121749.htm

二、安装相应软件包

$ sudo apt-get install apache2      ##安装Apache

$ sudo apt-get install openssl      ##安装openssl


$ sudo apt-get install libssl-dev    ##安装openssl开发库


$ sudo apt-get install bless      ##编辑器使用 bless 十六进制编辑器,需预先安装


三、openssl.cnf简单释义

$ vi /usr/lib/ssl/openssl.cnf



127 [ req_distinguished_name ]
128 countryName = Country Name (2 letter code)##国家名,2个字母代码简称
129 countryName_default = CN ##中国就是CN
130 countryName_min = 2
131 countryName_max = 2
132
133 stateOrProvinceName = State or Province Name (full name)##州或省的名字
134 stateOrProvinceName_default = beijing
135
136 localityName = Locality Name (eg, city) ##本地城市名
137 localityName_default =beijing
138 0.organizationName = Organization Name (eg, company) ##组织(公司)名
139 0.organizationName_default = beijing www company
140
145 organizationalUnitName =Organizational Unit Name(eg,section)##组织单元(部门)名
146 organizationalUnitName_default = www
147
148 commonName = Common Name(e.g.server FQDN or YOUR name)##服务器域名
149 commonName = www.baidu.com
150 commonName_max = 64
151
152 #emailAddress = Email Address ##Email地址
153 emailAddress = admin@baidu.com
154 emailAddress_max = 64
155
156 # SET-ex3 = SET extension number 3
157
158 [ req_attributes ]
159 #challengePassword = A challenge password ##修改密码
160 challengePassword =
161
163 challengePassword_min = 4
164 challengePassword_max = 20


四、成为数字证书认证机构(CA),并为该CA生成证书

①将openssl.cnf配置文件拷贝到当前目录下并创建以下在配置文件中指定的子文件夹

Ubuntu安装OpenSSL

$ sudo ln /usr/lib/ssl/openssl.cnf .

$ mkdir demoCA

$ cd demoCA

$ mkdir certs crl newcerts

$ touch index.txt serial ##index.txt为空;


##serial必须写入内容,且为字符串格式的数字(比如1111)

设置好这些后,现在就可以创建和发布证书了

②为自己的 CA 生成自签名证书,这意味着该机构是被信任的,而它的证书会作为 root 证书

$ openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf


Ubuntu安装OpenSSL

注:务必记住自己所输入的密码,命令输出的文件存储:ca.key 与 ca.crt 中。文件 ca.key 包括 CA 的私钥,而 ca.crt 包含了公钥证书。

五、为客户生成证书

现在,我们是 root CA 了,可以为客户签数字证书了,客户是www.baidu.com。

①生成公开/私有密钥对

$ openssl genrsa -des3 -out server.key 1024

Ubuntu安装OpenSSL

注:需要提供一个密码来保护你的密钥,密钥会被保存在 server.key 文件中.

②生成证书签名请求 ,一旦公司拥有了密钥文件,它应当生成证书签名请求(CSR)。CSR 将被发送给 CA,CA 会为该请求生成证书(通常在确认 CSR 中的身份信息匹配后)。

$ openssl req -new -key server.key -out server.csr -config openssl.cnf


Ubuntu安装OpenSSL

注:请记住自己的输入

③生成证书。CSR 文件需要拥有 CA 的签名来构成证书(在现实世界中,CSR 文件常常被发送给可信任的 CA 签名)。输入CA的密钥,使用我们自己的 CA 来生成证书:

$ openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf

六、在网站中使用PKI



$ sudo vi /etc/hosts


127.0.0.1 www.baidu.com

②启动一个拥有之前生成的证书的简单的 web 服务器

$ cp server.key server.pem

$ cat server.crt >> server.pem ##将密钥和证书合并成一个文件

$ openssl s_server -cert server.pem -www ##使用server.pem启动服务器


③默认情况下,服务器会监听 4433 端口。输入https://www.baidu.com:4433


注:提示此连接不受信任是因为我们的CA是自签名的,如是VeriSign 之类的 CA 授权的话就不会出现该情况了。

在这里可以配置让火狐接受我们的自签名(其他浏览器大同小异),配置如下:

菜单--->首选项--->高级--->证书--->查看证书(证书管理器)--->导入--->进入你配置openssl的目录,选择ca.crt--->打开(下载证书)--->勾上“信任使用此CA标识的网站”--->确定,然后刷新网站


SOURCE LINK [url]http://www.linuxidc.com/Linux/2015-10/124001p2.htm[/url]
你运行的命令找到了多个 `libcrypto.so*` 文件,这是正常的。我们来逐个分析这些路径,告诉你 **哪个是真正的生成库文件**,以及它们之间的关系。 --- ## ✅ 答案:所有这些都是同一个库的不同“副本”,原始生成位置是: ```text ./build_dir/target-aarch64-ca76ca55-linux/openssl-1.1.1w/libcrypto.so.1.1 ``` 这是 **编译阶段生成的原始动态库文件**。 其余的是在 **打包阶段** 被复制到不同目录用于后续打包 `.ipk` 软件包时使用的副本。 --- ## 🔍 详细解释每个文件的作用 | 文件路径 | 含义 | 是否为“源” | |--------|------|-----------| | `./build_dir/target-aarch64-ca76ca55-linux/openssl-1.1.1w/libcrypto.so.1.1` | ✅ 编译输出的核心库文件<br>由 `make` 编译 OpenSSL 源码后直接生成 | ✔️ 是原始生成文件 | | `./build_dir/target-aarch64-ca76ca55-linux/openssl-1.1.1w/ipkg-novatek/libopenssl/usr/lib/libcrypto.so.1.1` | 打包用的 staging 目录<br>表示这个文件将被打包进名为 `libopenssl` 的 `.ipk` 包中 | 📦 是副本(用于安装) | | `./build_dir/target-aarch64-ca76ca55-linux/openssl-1.1.1w/ipkg-install/usr/lib/libcrypto.so.1.1` | 统一安装根目录(union root)<br>OpenWrt 构建系统用来合并所有要安装的文件 | 📂 是副本(用于集成) | --- ### 🧱 构建流程简图(以 OpenSSL 为例) ```bash 1. 解压源码 → dl/openssl-1.1.1w.tar.gz → build_dir/openssl-1.1.1w/ 2. 编译 → 生成: build_dir/.../openssl-1.1.1w/libcrypto.so.1.1 ← 就是你要检查的! 3. 安装(make install)→ 复制到临时安装目录: ipkg-novatek/libopenssl/usr/lib/libcrypto.so.1.1 4. 打包 → 最终生成 .ipk 包: bin/packages/aarch64_novatek/libopenssl_1.1.1w-rX_aarch64.ipk 5. 可选:集成进固件 → 复制到 ipkg-install → 进固件镜像 ``` --- ## ✅ 如何验证 `ENGINE_by_id` 是否存在? 你应该使用第一个文件进行符号检查: ```bash nm -D ./build_dir/target-aarch64-ca76ca55-linux/openssl-1.1.1w/libcrypto.so.1.1 | grep ENGINE_by_id ``` 或者更完整一点: ```bash readelf -Ws ./build_dir/target-aarch64-ca76ca55-linux/openssl-1.1.1w/libcrypto.so.1.1 | grep ENGINE_by_id ``` ✅ 正常输出应类似: ```text 1234: 000000000005c3f0 112 FUNC GLOBAL DEFAULT 11 ENGINE_by_id ``` 如果没输出,说明 `enable-engine` 没有生效。 --- ## 💡 提示:如何确认你修改的 Makefile 已生效? 你可以查看构建日志: ```bash make package/feeds/packages/openssl/compile V=s ``` 然后搜索: ```text ./Configure linux-x86_64 ... enable-shared ... enable-engine ... ``` 确保 `enable-engine` 出现在配置命令中。 --- ## ✅ 总结:你应该怎么做? | 目标 | 操作 | |------|------| | 检查是否支持 ENGINE | 使用:<br>`nm -D build_dir/.../libcrypto.so.1.1 \| grep ENGINE_by_id` | | 修改功能行为 | 修改 `package/feeds/packages/openssl/Makefile` 中的 `CONFIGURE_ARGS += enable-engine` | | 验证构建参数 | 加 `V=s` 查看详细日志,确认 `./Configure` 命令包含 `enable-engine` | | 不要改 `dl/` 或 `build_dir/` 下的文件 | 它们是自动生成的,只读! | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值