### OpenSSL配置详解 #### 一、自建CA并签署证书 在进行HTTPS配置时,首先需要自建证书颁发机构(Certificate Authority,简称CA),并基于此CA为服务器和客户端签署相应的数字证书。以下是对该过程的详细解释: ##### 1. 创建CA所需的目录结构 ```bash mkdir -m 777 ./demoCA/certs mkdir -m 777 ./demoCA/crl mkdir -m 777 ./demoCA/newcerts mkdir -m 777 ./demoCA/private ``` - `certs`:存放签发的证书。 - `crl`:存放证书撤销列表(Certificate Revocation List)。 - `newcerts`:存放新签发的证书。 - `private`:存放私钥。 ##### 2. 生成CA私钥 ```bash openssl genrsa -out ./demoCA/private/cakey.pem 2048 ``` 这里生成了一个2048位的RSA私钥,用于作为CA的私钥。 ##### 3. 生成自签名证书 ```bash openssl req -new -x509 -key ./demoCA/private/cakey.pem -out ca.crt ``` 这一步通过`req`命令创建了自签名证书`ca.crt`,该证书用于验证CA本身的身份。 ##### 4. 初始化索引文件和序列号 ```bash touch index.txt touch serial echo '01' > serial ``` - `index.txt`:用于跟踪已签发的证书。 - `serial`:用于跟踪证书的序列号,每个证书的序列号必须唯一。 至此,自建CA的过程已经完成。 #### 二、准备服务器端证书 接下来是为服务器准备证书的过程: ##### 1. 生成服务器端私钥 ```bash openssl genrsa -out server.key 1024 ``` 这一步生成了服务器端的私钥,通常建议使用更长的密钥长度,例如2048位或更高。 ##### 2. 创建证书签名请求(CSR) ```bash openssl req -new -key server.key -sha512 -out server.csr -config openssl.cnf ``` 这里指定了使用SHA512算法来签名CSR,默认情况下会使用SHA1算法。 ##### 3. 签署服务器端证书 ```bash openssl ca -in server.csr -out server.crt -days 7300 -config openssl.cnf ``` - `days`参数设置了证书的有效期,这里设置为7300天,大约20年左右。 - `-config openssl.cnf`指定了配置文件的位置。 随后需要将生成的索引文件移动到服务器相关的目录中: ```bash mv ./demoCA/index.txt ./demoCA/server_index.txt mv ./demoCA/index.txt.attr ./demoCA/server_index.txt.attr mv ./demoCA/index.txt.old ./demoCA/server_index.txt.old ``` #### 三、准备客户端证书 客户端也需要具备证书以实现双向认证。 ##### 1. 创建客户端私钥 ```bash (umask 077; openssl genrsa -out client.key 1024) ``` 这里生成了客户端的私钥。 ##### 2. 创建客户端证书签名请求(CSR) ```bash openssl req -new -key client.key -out client.csr -config openssl.cnf ``` ##### 3. 签署客户端证书 ```bash openssl ca -in client.csr -out client.crt -days 7300 -config openssl.cnf ``` #### 四、导出客户端证书到浏览器 最后一步是将客户端证书导出到浏览器,以便于使用。 ```bash openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12 ``` 这一步生成了一个PKCS#12格式的文件`client.p12`,可以用于导入到浏览器或其他应用中。 ### openssl.cnf 配置文件 接下来是对`openssl.cnf`配置文件的解析: ```plaintext # OpenSSL example configuration file. # This is mostly being used for generation of certificate requests. # This definition stops the following lines choking if HOME isn't # defined. HOME =. RANDFILE =$ENV::HOME/.rnd # Extra OBJECT IDENTIFIER info: # oid_file =$ENV::HOME/.oid oid_section = new_oids # To use this configuration file with the "-extfile" option of the # "openssl x509" utility, name here the section containing the # X.509v3 extensions to use: # extensions = # (Alternatively, use a configuration file that has only # X.509v3 extensions in its main [=default] section.) [new_oids] # We can add new OIDs in here for use by 'ca', 'req' and 'ts'. # Add a simple OID like this: # testoid1 = 1.2.3.4 # Or use config file substitution like this: # testoid2 = ${testoid1}.5.6 # Policies used by the TSA examples. tsa_policy1 = 1.2.3.4.1 tsa_policy2 = 1.2.3.4.5.6 tsa_pol ``` 在这个配置文件中,我们可以看到以下主要配置项: - `HOME`: 定义了默认的主目录位置。 - `RANDFILE`: 指定了随机数文件的位置,用于加密操作。 - `oid_section`: 指定了对象标识符(OID)的定义部分。 - `[new_oids]`: 定义了新的OID,这些OID可以用于CA、证书请求(req)以及时间戳服务(TS)等场景。 - `tsa_policy1` 和 `tsa_policy2`: 定义了时间戳服务(TSA)所使用的策略。 通过以上步骤和配置文件的理解,我们可以成功地构建一个完整的自签名证书系统,并能够为服务器和客户端分别签发证书,确保HTTPS通信的安全性。
- 粉丝: 7
- 资源: 18
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助