示例:linux上如何使用openssl扩展
1. 首先得安装php的openssl扩展
``` shell
php -m | grep openssl
```
执行以上命令,确保已经安装了openssl php扩展
2. 接下来要安装Linux openssl
``` shell
yum -y install openssl-devel
```
3. 生成RSA公钥和私钥
- 生成私钥
``` shell
openssl genrsa 1024 > rsa_private.key
```
>[warning]1024是密钥的长度,如果密钥较长,相应加密后的密文也会较长
- 生成公钥
``` shell
openssl rsa -in rsa_private.key -pubout > rsa_public.key
```
## :-: **openssl详解**
### :-: **openssl简介**
数据加密是信息信息传输中的一个重要组成部分.任何信息都以明文方式传输,确实是个很不安全的做法.所以,
需要对数据进行加密.将明文数据转换为密文数据,再进行传输.
OpenSSL是一套用于SSL/TLS协议的加密工具,其作用有:
1.生成私有密钥.
2.生成证书,即数字签名证书,它包含一个公有密钥,可以用来单向的加密和解密数据.即,使用公钥加密的数据,只能使用
私有密钥解密.使用私钥加密的数据,可以使用公钥来解密.
3.计算信息摘要.
4.SSL/TLS客户端和服务器端测试.
5.处理S/MIME标记和邮件的加密.
## :-: **加密技术简介**
- 加密,即将明文数据转换为密文数据的过程.以起到对明文保密的作用.
- 加密算法: 数据加密过程所采用的一种运算算法.用于将明文转换为密文.
- 密钥: 加密算法通过与密钥进行某种运算,将明文数据进行加密,生成加密数据.解密时,加密算法通过密钥,
将加密数据再转换为明文数据.
- 现今的加密技术,加密算法是公开的,即所有人都知道加密所采用的运算方式.但只有使用密钥才能进行
对密文的解密.所以,密钥的保护,是数据安全的核心.
## :-: **openssl工具使用简介**
1、生成私有密钥,可以使用不同的数字签名算法
```shell
//采用DSA算法
$ openssl dsaparam -noout -out dsakey0.pem -genkey 1024
//采用RSA算法
$ openssl genrsa -out rsakey0.pem 1024
采用RSA算法,并使用密码保护.在生成私钥时,需要输入一个密码,用于保护私钥.
在使用这个私钥进行加/解密操作时,也需要输入这个密码.
$ openssl genrsa -des3 -out rsakey1.pem 10242.
```
2、公用密钥的生成方法,根据私钥来生成公钥
``` shell
//生成dsa算法的公钥
$ openssl dsa -in dsakey0.pem -pubout -out dsakey0-pub.pem
//生成rsa算法的公钥
$ openssl rsa -in rsakey0.pem -pubout -out rsakey0-pub.pem3.
```
3、自签名证书的生成方法
```shell
//产生DSA算法的证书
$ openssl req -x509 -key dsakey0.pem -days 365 -out mycert-dsa.pem -new
//产生RSA算法的证书
$ openssl req -x509 -key rsakey0.pem -days 365 -out mycert-rsa.pem -new
```
4、使用证书进行邮件加密
我们的明文信件内容:
``` shell
$ cat test.txt
111111
222222
333333
444444
aaaaaa
```
使用证书对明文信件进行加密,输出到etest.txt文件:
``` shell
$ openssl smime -encrypt -in test.txt -out etest.txt mycert-rsa.pem
```
查看加密后的密文内容:
``` shell
$ cat etest.txt
MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name="smime.p7m"
Content-Transfer-Encoding: base64
MIIBYAYJKoZIhvcNAQcDoIIBUTCCAU0CAQAxgewwgekCAQAwUjBFMQswCQYDVQQG
EwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lk
Z2l0cyBQdHkgTHRkAgkAr71mh4NRX/UwDQYJKoZIhvcNAQEBBQAEgYCbrA1WBwQK
Zj7TcNtrxiDzqMBc/Lu063SLKvBK6mQMqT+npFOOFtzIKdFVkldH0YyQhMZDSCyq
YUtGwOaDw6Jn0AHRt64UwPOKoaeL9RVqp9vgtiFC/uXis5UeyZCWS1z7Jsih8Aa+
Da/DQN0sOCX85OdK/TDewNx8mTaYBbVf4jBZBgkqhkiG9w0BBwEwGgYIKoZIhvcN
AwIwDgICAKAECNxsgiJ2s+1ugDC6JknPL+rDYBCddcyPH+bMYjqrUP0hE/GQ5WSj
sv8CDkOUdvY5XG440yiAL3Z3ysI=
```
使用私钥进行解密,输出到dtest.txt文件:
``` shell
$ openssl smime -decrypt -in etest.txt -inkey rsakey0.pem -out dtest.txt
```
查看解密后的信件内容,与原明文信件内容完全一致.
``` shell
$ cat dtest.txt
111111
222222
333333
444444
aaaaaa
```
5、简单的文件加密
明文文件内容:
``` shell
$ cat test.txt
1
22
333
4444
55555
Hello
```
加密明文文件,输出为test.enc文件,输入”123123”作为加密密码:
``` shell
$ openssl enc -aes-256-cbc -salt -in test.txt -out test.enc
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
```
对密文进行解密,输入”123123”作为解密密码:
``` shell
$ openssl enc -d -aes-256-cbc -in test.enc
enter aes-256-cbc decryption password:
1
22
333
4444
55555
Hello
```
6、简单的字符串加密
采用base64方式进行加密:
``` shell
$ echo "encode me" | openssl enc -base64
ZW5jb2RlIG1lCg==
```
解密时,需要知道加密算法,才可解密:
``` shell
$ echo "ZW5jb2RlIG1lCg==" | openssl enc -base64 -d
encode me
```
7、SSL客户端和服务器的测试
使用私钥和证书启动SSL服务器,"-www”的作用是,当客户端连接服务器时,发送一个状态信息网页到客户端.
openssl s_server -key mykey.pem -cert mycert.pem -www连接SSL服务器到,客户端会获得服务器的证书:
openssl s_client -connect localhost:4433
- 杂谈
- 开发 & 维护的工作流程
- 新手如何看php手册 和 框架手册
- 开发 & 维护的不同点
- 从0到1,搭建新项目的工作流程
- 从1到N,维护的工作流程
- 优化流程
- 生成错误日志和慢日志的方法
- 查错思路
- 怎么快速接手一个项目
- 前端常用知识点
- javascript
- 自己封装的函数
- 处理数字
- 功能代码
- 动态添加图片
- 判断是手机端还是pc端
- javascript:;是什么意思?怎么用呢
- html & h5
- a标签中target设置为blank和_blank有什么区别?
- 乱码
- 提交方式:button标签 和 input
- 块元素
- 内联元素
- h5特有属性
- h5的localStorage【增、删、改、查】
- jquery
- 常用方法
- 功能代码
- 动态删除图片
- 一个按钮,切换2种状态
- 换肤
- 深入理解(function(){... })();
- json & xml
- json
- 语法速记
- json对象取值
- 字符串、对象、数组的区别
- xml
- [CDATA[%s]]的作用是什么
- 转义字符
- CDATA 想被xml解析的文本数据
- CDATA 不想被xml解析的文本数据
- 微信小程序
- 其他
- websocket
- 跨域
- css
- 行内 & 内连 & 外连 写法
- 优先级
- 更加精准的匹配
- 使用百分比如何生效
- php在html、js、jq中的的原生写法
- *php在html中的语法
- php在js中的语法
- php在jq中的语法
- 正则表达式
- php常用基础知识(思想为主)
- php为什么是“边编译边运行”
- 冒号、endif、endwhile、endfor使用
- 递归思想(速记法)
- cookie和session的理解
- php常用内置(系统)函数
- 常量
- 字符串
- 数组
- 日期时间
- 文件 & 目录
- 数学
- 程序执行
- 判断
- 选项和信息(修改配置文件的)
- 错误处理 & 日志记录
- 编码格式
- session
- IP相关
- 类 & 对象
- 性能
- 其他函数
- 魔术方法
- $_SERVER
- 变量处理
- php自己封装的一些函数
- 导入、导出、生成文件
- 数组
- 数字
- 字符串
- 其他
- 获取linux硬件信息
- 常见插件/类库使用
- 前端-框架/插件
- bootstrap 学习笔记
- layer 学习笔记
- layDate 学习笔记
- 百度ueditor1.4.4.3富文本编辑器
- quill富文本编辑器
- 百度ECharts图形报表
- webuploader上传图片
- 后端类库
- workerman 聊天室
- QRCODE 二维码
- redis
- seaslog 日志
- phpspider 爬虫
- Mailer 发送邮件
- simple_html_dom
- phpstorm使用
- 快捷键
- 连接mysql数据库
- 断点 + debug调试
- 运行内存不够
- wamp环境
- yii、laravel、tp、开发自己的php框架
- 看框架源码的思路
- tp5框架的使用
- 1、助手函数原理解析
- 开发自己的php框架
- 常用的开发思路 和 小功能实现代码
- 爬虫思路
- 功能点思路
- tp5判断是不是异地登录(简单版)
- 微信开发,反向代理
- 微信开发,关闭当前页面
- 消息队列的实现
- 页面静态化
- session串号
- 站内信设计思路
- web在线管理器
- 语言相关(开发有关)
- 接收json(text/xml)格式数据
- 原生文件上传(状态码)
- openssl扩展
- 打印对象 和 遍历对象
- 使用OB缓存的几个原则
- CLI模式执行php文件
- foreach时,添加元素 或 修改元素的值
- 功能点 代码实现
- 生成url目录树(没有pid)
- 多图上传(vue传base64)
- 下载文件,耗时算法
- 生成商品二维码
- 导出excel
- 搜索
- 阿里大鱼发短信
- 使用阿里云oss
- location.href跳转后,丢失用户的session
- “\r ” “\r\n” “\t”的区别
- php的配置文件详解
- 开启错误日志
- 开启慢日志
- 开启短标签
- 分析php-fpm.conf中的request_terminate_timeout参数