OpenSSL自制证书

Reading time ~1 minute

今天倒腾了下OpenSSL自制证书,这里做个记录。

我是使用的Mac OS,系统自带OpenSSL,OpenSSL使用的默认配置/System/Library/OpenSSL/openssl.cnf。

首先由于是默认配置,先按照默认配置的要求建立目录结构:

mkdir -p ./demoCA/{private,newcerts}
touch ./demoCA/index.txt
echo 01 > ./demoCA/serial

其中serail存放下一个证书的序列号,index.txt存放证书信息数据库。

然后生成CA证书的RSA密钥对:

openssl genrsa -des3 -out ./demoCA/private/cakey.pem 2048

参数解释:

genrsa:用于生成 RSA 密钥对的 OpenSSL 命令。

-des3:使用3-DES对称加密算法加密密钥对,该参数需要用户在密钥生成过程中输入一个口令用于加密。今后使用该密钥对时,需要输入相应的口令。如果不加该选项,则不对密钥进行加密。

-out ./demoCA/private/cakey.pem:令生成的密钥对保存到文件./demoCA/private/cakey.pem。

2048:RSA模数位数,在一定程度上表征了密钥强度。

接着生成CA证书请求:

为了获取一个 CA 根证书,我们需要先制作一份证书请求。先前生成的CA密钥对被用于对证书请求签名。

openssl req -new -days 365 -key ./demoCA/private/cakey.pem -out careq.pem

参数解释:

req:用于生成证书请求的OpenSSL命令。

-new:生成一个新的证书请求。该参数将令OpenSSL在证书请求生成过程中要求用户填写一些相应的字段。

-days 365:从生成之时算起,证书时效为365天。

-key ./demoCA/private/cakey.pem:指定./demoCA/private/cakey.pem为证书所使用的密钥对文件。

-out careq.pem:令生成的证书请求保存到文件 careq.pem。

最后通过对CA证书请求进行签名得到CA的证书:

在实际应用中,用户可以通过向知名CA递交证书请求来申请证书。但是在这里,我们需要建立的是一个根CA ,只能由我们自己来对证书请求进行签名。

openssl ca -selfsign -in careq.pem -out ./demoCA/cacert.pem

ca:用于执行CA相关操作的OpenSSL命令。

-selfsign:使用对证书请求进行签名的密钥对来签发证书,即自签名。

-in careq.pem:指定careq.pem为证书请求文件。

-out ./demoCA/cacert.pem:指定./demoCA/cacert.pem为输出的证书。

至此,我们已经生成了一个根证书./demoCA/cacert.pem以及其对应的RSA密钥对的私钥./demoCA/private/cakey.pem,接下来无论是FTPS、HTTPS还是其它什么需要使用证书的地方,都是可以直接使用这个证书的。

除了直接使用根证书,我们也可以选择用根证书签发新的证书来使用。

首先是生成新证书的RSA密钥对:

openssl genrsa -out newkey.pem 2048

此处因为我们架设HTTPS服务器需要使用其私钥,所以这里没有使用3-DES加密。

然后是生成新证书请求:

openssl req -new -days 365 -key newkey.pem -out newreq.pem

新证书请求使用先前生成的新密钥进行签名。

最后使用CA对新证书请求进行签名得到新证书:

openssl ca -in newreq.pem -out newcert.pem

注意此处由于签名需要使用的CA的私钥,而CA的私钥我们使用了3-DES加密,所以我们需要输入CA的私钥来完成此操作。

自此,我们就用我们自制的根证书签发了一个新的证书,通过这样的方式,我们还可以继续用根证书签发的二级证书再签发三级证书,完成证书的管理。

最后在写几个可能需要是用的命令:

查看证书:

openssl x509 -noout -text -in cert.pem

验证证书:

openssl verify -CAfile ./demoCA/cacert.pem hostcert.pem

对加密的私钥进行解密(Apache需要解密后的私钥):

openssl rsa -in encrypted_key.pem -out decrypted_key.pem

一步生成同时包含私钥和证书的文件:

openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem

这个文件中由于已经包含了私钥,所以在使用的时候,可以只指定证书文件为此文件,而不用再同时指定私钥文件。

挂载网络文件夹后网络故障时文件操作命令卡死

挂载 NFS 或者 Samba 的时候,经常会由于网络故障导致挂载好的链接断掉。此时如果尝试进行 ls、cd、df 等各种命令,只要与此目录沾上边,就会卡住。如果使用了类似 oh-my-zsh 这种配置的,只要在网络目录中,弹出命令提示符前就会直接卡住。这个时候第一反应就是...… Continue reading

路由折腾记 第四弹

Published on September 02, 2017