ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
示例: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