网站首页 > 精选教程 正文
https站点证书自制
1. 自制一个CA证书(假定的第三方认证机构)
生成CA私钥(fakeca.key)
openssl genrsa -des3 -out fakeca.key 4096
这个命令对输入的密码使用DES3加密,并生成一个4096位的密钥
生成CA(fakeca.crt)证书,用于向客户端发布和对站点进行签名
openssl req -new -x509 -days 3650 -key fakeca.key -out fakeca.crt
2. 自制Server(站点证书),并利用自制的CA证书(fakeca.crt)对其进行签名
Server的私钥制作
openssl genrsa -des3 -out server.key 4096
生成免密码输入版本
openssl rsa -in server.key -out server.nosecret.key
生成CSR(Certificate Signing Request---签名请求文件)
openssl req -new -key server.key -out server.csr
用CA证书私钥对csr文件签名(CA不能用X509,这点需要注意)生成Server证书
openssl ca -days 3650 -in server.csr -cert fakeca.crt -keyfile fakeca.key -out server.crt
若出现如下错误:
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for fakeca.key:
/etc/pki/CA/index.txt: No such file or directory
unable to open '/etc/pki/CA/index.txt'
执行如下命令后,再次对server.csr进行签名
touch /etc/pki/CA/index.txt
touch /etc/pki/CA/serial
echo "01" > /etc/pki/CA/serial
配置https服务
nginx的https服务配置
将生成的证书导入和Server的私钥(免密版本) 导入到nginx的配置目录下(cert为自建)
cp ./server.crt /opt/nginx/conf/cert/server.crt
cp ./server.nosecret.key /opt/nginx/conf/cert/server.nosecret.key
编辑nginx配置文件(/opt/nginx/conf/nginx), 在需要开启https访问的站点目录(location)增加443端口监听,配置完成后重启服务
vim?/opt/nginx/conf/nginx
listen?????? 443 ssl;
ssl_certificate????? cert/server.crt;
ssl_certificate_key? cert/server.nosecret.key;
ssl_session_cache??? shared:SSL:1m;
ssl_session_timeout? 5m;
ssl_ciphers? HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers? on;
防火墙放行443,并重新加载防火墙规则
firewall-cmd –add-port 443/tcp --permanent
浏览器中输入server地址(https://10.10.11.250),即可打开
Apache配置https服务
在httpd.conf配置文件中加载mod_ssl.so模块
cat /etc/httpd/conf/httpd.conf
Listen 80
DocumentRoot "/home/admin/www/html"
<Directory "/home/admin/www/html">
??? Require all granted
??? Require host ip
</Directory>
....?
LoadModule ssl_module modules/mod_ssl.so
若模块不存在,需要安装
yum install mod_ssl
配置ssl.conf配置文件:
cat /etc/httpd/conf.d/ssl.conf
Listen 443 https
<VirtualHost _default_:443>
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
SSLCertificateFile /etc/httpd/conf/cert/server.crt
SSLCertificateKeyFile /etc/httpd/conf/cert/server.nosecret.key
</VirtualHost>
重新加载httpd服务后,即可访问https站点了
SSL的协商过程
抓取报文,可见整个协商过程如下:
1、TCP三次握手,client与Server的443端口建立TCP连接
2、Client发起Client Hello,报文中指定版本,随机数(random1),client所有支持的密码套件(CipherSuites),其它参数
3. Server回应Server Helllo,包含指定版本,Server端的随机数(random2),选定的CipherSuites,会话ID(Session ID)和其它参数
4、Server发送Certificate(Server的证书), Server Hello done, 客户端需要验证服务器发过来的证书的合法性(通过操作系统内置的ca证书,来验证服务器证书的颁发者和过期时间是否合法,如果存在数据签名,则用操作系统中颁发者CA的公钥对签名解密,用相同的hash算法算出签名的hash值,将这个hash值与签名中的hash值对比。验证是否是真实的服务器发送的)
5、Client发起Key Exchange, 这一步实际上是三个过程合为一个报文进行的:
Client Key Exchange:客户端验证通过,取出证书中的公钥,然后再生成一个随机数random3,用这个公钥对random3加密,生成PreMaster Key,客户端根据服务器传来的公钥生成了 PreMaster Key,Client Key Exchange 就是将这个 key 传给服务端,服务端再用自己的私钥解出这个 PreMaster Key 得到客户端生成的 Random3。至此,客户端和服务端都拥有 Random1 + Random2 +Random3,两边再根据同样的算法就可以生成一份秘钥,握手结束后的应用层数据都是使用这个秘钥进行对称加密。
Change Cipher Spec(Client):这一步是客户端通知服务端后面再发送的消息都会使用前面协商出来的秘钥加密了,是一条事件消息。
Encrypted Handshake Message(Client): 这一步对应的是 Client Finish 消息,客户端将前面的握手消息生成摘要再用协商好的秘钥加密,这是客户端发出的第一条加密消息。服务端接收后会用秘钥解密,能解出来说明前面协商出来的秘钥是一致的。
6、Server通告使用加密进行通讯
猜你喜欢
- 2024-10-26 免费SSL证书获取与部署教程 永久免费的ssl证书哪里申请
- 2024-10-26 自动申请(并自动更新)免费ssl证书的Openresty镜像
- 2024-10-26 cloudflare免费https证书制作教程
- 2024-10-26 教程|怎么获取国密SSL证书 ssl国密算法
- 2024-10-26 5大步骤教你轻松申请免费SSL证书 免费ssl证书和收费的区别
- 2024-10-26 openssl生成SSL证书和SSL证书密钥
- 2024-10-26 域名ssl证书越来越贵的今天,开启免费ssl证书的配置
- 2024-10-26 免费生成HTTPS证书方法 证书生成器在线制作工具
- 2024-10-26 用acme.sh给网站域名,申请免费SSL永久证书(自动续期)
- 2024-10-26 小程序开发SSL证书申请途径 小程序开发ssl证书申请途径怎么选
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)