uos上配置apache ssl(https)
https://blog.csdn.net/deng_xj/article/details/106786151?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-106786151-blog-34434165.pc_relevant_downloadblacklistv1&spm=1001.2101.3001.4242.1&utm_relevant_index=3
密码学:一文读懂常用加密技术原理及其逻辑与应用方法
https://baijiahao.baidu.com/s?id=1685474345600994715&wfr=spider&for=pc
18 张图彻底弄懂 HTTPS 的原理!
证书验证的过程是使用非对称加密的,客户端对服务器端发起请求,服务器返回一个证书,客户端验证这个证书的合法性,如果这个证书是合法的,那么就生成一个随机值,利用这个随机值作为对称加密的钥匙
一个数字证书通常包含了:- 公钥;- 持有者信息;- 证书认证机构(CA)的信息;- CA 对这份文件的数字签名及使用的算法;- 证书有效期;- 还有一些其他额外信息;
为了让服务端的公钥被大家信任,服务端的证书都是由 CA (Certificate Authority,证书认证机构)签名的,CA 就是网络世界里的公安局、公证中心,具有极高的可信度,所以由它来给各个公钥签名,信任的一方签发的证书,那必然证书也是被信任的。
之所以要签名,是因为签名的作用可以避免中间人在获取证书时对证书内容的篡改
数字证书签名流程:
首先 CA 会把持有者的公钥、用途、颁发者、有效时间等信息打成一个包,然后对这些信息进行 Hash 计算,得到一个 Hash 值; 然后 CA 会使用自己的私钥将该 Hash 值加密,生成 Certificate Signature,也就是 CA 对证书做了签名; 最后将 Certificate Signature 添加在文件证书上,形成数字证书;
证书验证流程:
首先客户端会使用同样的 Hash 算法获取该证书的 Hash 值 H1; 通常浏览器和操作系统中集成了 CA 的公钥信息,浏览器收到证书后可以使用 CA 的公钥解密 Certificate Signature 内容,得到一个 Hash 值 H2 ; 最后比较 H1 和 H2,如果值相同,则为可信赖的证书,否则则认为证书不可信。
一句话概括就是使用公钥对证书签名解密的过程
非对称加密的算法:RSA、Elgamal、背包算法、Rabin、D-H、ECC (椭圆曲线加密算法)
1.创建私钥文件
openssl genrsa -des3 -out server.key 2048
去掉-des3 就不会需要密码,建议加上。
生成命令如下,其中:/C=CN(国家缩写)/ST=(省份)/L=(城市)/O=(组织名称):
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -subj "/C=CN/ST=ZheJiang/L=HangZhou/O=MJY" -keyout CA-private.key -out CA-certificate.crt -reqexts v3_req -extensions v3_ca openssl genrsa -out private.key 2048 openssl req -new -key private.key -subj "/C=CN/ST=ZheJiang/L=HangZhou/O=MJY/CN=127.0.0.1" -sha256 -out private.csr #最后的 CN=IP地址或域名
生成ext文件:
#vim private.ext #复制如下内容到private.ext文件中 [ req ] default_bits = 1024 distinguished_name = req_distinguished_name req_extensions = san extensions = san [ req_distinguished_name ] countryName = CN stateOrProvinceName = Definesys localityName = Definesys organizationName = Definesys [SAN] authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = IP:127.0.0.1 #其中ip后内容,改成自己需要的ip地址(服务器ip或者域名) #最后使用 :wq 保存退出
生成CA证书
openssl x509 -req -days 3650 -in private.csr -CA CA-certificate.crt -CAkey CA-private.key -CAcreateserial -sha256 -out private.crt -extfile private.ext -extensions SAN
2.创建CSR(Certificate Signing Request)文件
openssl req -new -key server.key -out server.csr
输入密码之后还需要填写一些信息:
信息注解 Country Name (2 letter code) [AU]:CN ←输入国家代码 State or Province Name (full name) [Some-State]:SHANGHAI ← 输入省名 Locality Name (eg, city) []:SHANGHAI ←输入城市名 Organization Name (eg, company) [Internet Widgits Pty Ltd]:COMPANY ← 输入公司名 Organizational Unit Name (eg, section) []:RSA ← 输入组织单位名 Common Name (eg, YOUR name) []:virtual-machine ← 输入主机名(想要开启https的主机名) Email Address []:123@163.com ←输入电子邮箱地址
3.自己签发证书
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
若以上步骤执行正常,当前目录会生成server.key、server.csr、server.crt三个文件
复制到相应目录
sudo cp server.crt /etc/ssl/certs
sudo cp server.key /etc/ssl/private
ubuntu系统上如何添加新的根证书
如果自己部署了一个CA系统,或者使用openssl生成了一个自签名的证书,如何让ubuntu系统信任这些证书呢
添加证书:
首先,复制pem格式的根证书,重命名为 .crt格式
然后,执行下边的命令
$sudo cp 证书路径.crt /usr/local/share/ca-certificates
$sudo update-ca-certificates
update-ca-certificates命令将PEM格式的根证书内容附加到/etc/ssl/certs/ca-certificates.crt ,而/etc/ssl/certs/ca-certificates.crt 包含了系统自带的各种可信根证书.
删除证书:
$sudo rm -f /usr/local/share/ca-certificates/证书名称.crt
$sudo update-ca-certificates
修改ssl配置文件
sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl gedit /etc/apache2/sites-enabled/default-ssl.conf
指定已经生成的crt证书和私钥位置
修改完成后,重启服务
service apache2 restart
若成功启动服务,就可以使用https访问了
查看下apache2的日志
原因:使用的私钥长度太短了,需要高于1024位
解决方法:重新生成一个2048位的密钥和证书
curl wget 不验证证书进行https请求
$ wget 'https://x.x.x.x/get_ips' --no-check-certificate
$ curl 'https://x.x.x.x/get_ips' -k
添加https证书信任
Centos 导入https 证书
安装 ca-certificates:
yum install ca-certificates
update-ca-trust enable
将其添加到/etc/pki/ca-trust/source/anchors/
cp foo.crt /etc/pki/ca-trust/source/anchors/
使用命令
update-ca-trust
ubuntu 导入https 证书
Ubuntu上CA证书的配置可以通过工具ca-certificates来方便的进行。该工具默认是随Ubuntu安装的,如果没有可以通过下面的命令来安装:
sudo apt-get install ca-certificates
需要安装CA证书我们只需要将其放在”/usr/share/ca-certificates”目录或其子目录下,ca-certificates工具就能自动扫描到。为了不与其它根证书混淆,我们创建一个子目录名为”extra”:
sudo mkdir /usr/share/ca-certificates/extra
然后将待安装的证书拷贝到刚刚创建的目录下:
sudo cp CASHLibCACert.crt /usr/share/ca-certificates/extra/CASHLibCACert.crt
(注意这里的证书是.crt的扩展名)
接下来让ca-certificates工具帮我们安装CA证书:
sudo dpkg-reconfigure ca-certificates