实验环境:centos7

0x01 升级openssl

在centos7中使用yum安装的openssl,发现版本比较老,停留在OpenSSL 1.0.2k-fips 26 Jan 2017,所以升级一下openssl到OpenSSL 1.1.1i 8 Dec 2020

wget https://www.openssl.org/source/openssl-1.1.1i.tar.gz #下载最新openssl包
tar -zxvf openssl-1.1.1i.tar.gz 
cd openssl-1.1.1i/
./config --prefix=/usr/local/openssl
make &&make install #编译和安装,如果报找不到gcc就安装gcc,参考如:yum -y install gcc gcc-c++ libstdc++-devel 
mv /usr/bin/openssl /usr/bin/openssl.bak 
ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
ldconfig -v #设置生效
openssl version #查看openssl版本

0x02 创建根证书

  1. 生成私钥

    openssl genrsa -out ca.key 2048 #生成2048位私钥
  2. 生成证书请求文件

    openssl req -new -key ca.key -out ca.csr
  3. 生成自签证书

    openssl req -x509 -days 3650 -key ca.key -in ca.csr -out ca.crt

0x03 创建用户证书

  1. 生成私钥

    openssl genrsa -out server.key 2048
  2. 生成证书请求

    openssl req -new -key server.key -out server.csr
  3. 生成证书(根证书对用户的证书请求签名,最终生成用户证书)
    先把openssl配置文件复制到当前目录

    find / -name "openssl.c*"
    cp /usr/local/openssl/ssl/openssl.cnf ./

    然后再生成server.crt证书

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

    这时候会报错ca: ./demoCA/newcerts is not a directory,需要手动创建CA目录结构

    mkdir ./demoCA
    mkdir demoCA/newcerts
    touch demoCA/index.txt 
    echo "01" > demoCA/serial #这里的01控制证书杂项里的序列号

    此时还会报错 The organizationName field is different between CA certificate and the request,还需要修改openssl.cnf配置文件

    vi openssl.cnf #将organizationName和organizationalUnitName改为optional
       [ policy_match ]
       countryName             = match
       stateOrProvinceName     = match
       organizationName        = optional
       organizationalUnitName  = optional
       commonName              = supplied
       emailAddress            = optional

    然后就可以生成证书了。

  4. 验证证书有效性
    verify 命令对证书的有效性进行验证,verify 指令会沿着证书链一直向上验证,直到一个自签名的 CA:

    openssl verify -CAfile ca.crt server.crt
    server.crt: OK

0x04 安装mod_ssl模块

安装httpd默认是没有安装 mod_ssl的,要自己安装。

yum -y install mod_ssl

0x05 apache配置文件加载mod_ssl模块

vi /etc/httpd/conf/httpd.conf #在LoadModule中加入下方这一行,加载mod_ssl模块
LoadModule ssl_module modules/mod_ssl.so

0x06 编辑ssl.conf文件

在配置文件中对相应的项目进行修改

vi /etc/httpd/conf.d/ssl.conf
Listen 443 https #开启443端口
SSLProtocol all -SSLv2 -SSLv3  # 添加SSL协议支持协议,去掉不安全的协议。
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM   # 使用此加密套件。
SSLHonorCipherOrder on
SSLCertificateFile /usr/https/server.crt   # 将domain name_public.crt替换成您证书文件名。
SSLCertificateKeyFile /usr/https/server.key   # 将domain name.key替换成您证书的秘钥文件名。
#SSLCertificateChainFile /usr/4119464_chain.crt  # 证书链文件,我们没有,所以注释掉
DocumentRoot "/var/www/html" #你的网站家目录
ServerName cocosec.top:443 #你的域名

这里为了用wireshark导入私钥解密https流量,可以将密码套件改为SSLCipherSuite AES128-SHA
然后重启httpd就行了

0x07 查看证书

配置好本地/etc/hosts把自定义的域名指向装有lamp的服务器,然后访问查看证书。
查看自制证书
这里由于客户端未导入受信任的根证书,所以浏览器输入栏左上方的小锁标志有个小三角,需要把openssl生成的根证书导入浏览器才能去掉。
这里将ca证书转换为pem格式,然后再把ca.pem导入浏览器

openssl x509 -in ca.crt -out ca.pem -outform PEM

用户证书与根证书

参考文档
https://www.gokuweb.com/operation/d95eae05.html
https://zhuanlan.zhihu.com/p/115324515
https://blog.csdn.net/qq_45414629/article/details/104165931
https://m.linuxidc.com/Linux/2015-05/117034.htm
https://blog.csdn.net/howeverpf/article/details/21622545
https://blog.csdn.net/weixin_30265103/article/details/101908216
https://blog.csdn.net/vi18387682183/article/details/108733030
Last modification:May 24th, 2021 at 11:37 pm