php php_openssl.dll作用

OpenSSL使用详解
本文介绍了OpenSSL的基本概念及其在数据加密中的应用,包括私钥和公钥的生成、自签名证书的创建、邮件及文件的加密解密过程,并演示了SSL客户端与服务器的测试方法。

一.openssl简介

数据加密是信息信息传输中的一个重要组成部分.任何信息都以明文方式传输,确实是个很不安全的做法.所以,
需要对数据进行加密.将明文数据转换为密文数据,再进行传输.

OpenSSL是一套用于SSL/TLS协议的加密工具,其作用有:
1.生成私有密钥.
2.生成证书,即数字签名证书,它包含一个公有密钥,可以用来单向的加密和解密数据.即,使用公钥加密的数据,只能使用
私有密钥解密.使用私钥加密的数据,可以使用公钥来解密.
3.计算信息摘要.
4.SSL/TLS客户端和服务器端测试.
5.处理S/MIME标记和邮件的加密.

二.加密技术简介.

加密,即将明文数据转换为密文数据的过程.以起到对明文保密的作用.
加密算法: 数据加密过程所采用的一种运算算法.用于将明文转换为密文.
密钥: 加密算法通过与密钥进行某种运算,将明文数据进行加密,生成加密数据.解密时,加密算法通过密钥,
将加密数据再转换为明文数据.
现今的加密技术,加密算法是公开的,即所有人都知道加密所采用的运算方式.但只有使用密钥才能进行
对密文的解密.所以,密钥的保护,是数据安全的核心.

三.openssl工具使用简介

1.私有密钥生成方法

生成私有密钥,可以使用不同的数字签名算法.下面分别介绍;

#采用DSA算法
$ openssl dsaparam -noout -out dsakey0.pem -genkey 1024
#采用RSA算法
$ openssl genrsa -out rsakey0.pem 1024
#采用RSA算法,并使用密码保护.在生成私钥时,需要输入一个密码,用于保护私钥.
#在使用这个私钥进行加/解密操作时,也需要输入这个密码.
$ openssl genrsa -des3 -out rsakey1.pem 1024

2.公用密钥的生成方法

根据私钥来生成公钥
#生成dsa算法的公钥
$ openssl dsa -in dsakey0.pem -pubout -out dsakey0-pub.pem
#生成rsa算法的公钥
$ openssl rsa -in rsakey0.pem -pubout -out rsakey0-pub.pem

3.自签名证书的生成方法

#产生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.使用证书进行邮件加密

我们的明文信件内容:

$ cat test.txt
111111
222222
333333
444444
aaaaaa

使用证书对明文信件进行加密,输出到etest.txt文件:

$ openssl smime   -encrypt -in test.txt -out etest.txt mycert-rsa.pem

查看加密后的密文内容:

$ 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文件:

$ openssl smime  -decrypt -in etest.txt -inkey rsakey0.pem  -out dtest.txt

查看解密后的信件内容,与原明文信件内容完全一致.

$ cat dtest.txt 
111111
222222
333333
444444
aaaaaa

5.简单的文件加密

明文文件内容:

$ cat test.txt 
1
22
333
4444
55555
Hello

加密明文文件,输出为test.enc文件,输入”123123”作为加密密码:

$ 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”作为解密密码:

$ openssl enc -d -aes-256-cbc -in test.enc
enter aes-256-cbc decryption password:
1
22
333
4444
55555
Hello

6.简单的字符串加密

采用base64方式进行加密:

$ echo "encode me" | openssl enc -base64
ZW5jb2RlIG1lCg==

解密时,需要知道加密算法,才可解密:

$ 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

 

<think>好的,我需要帮助用户检查PHP配置中的三个问题:是否启用了php_openssl.dll扩展,allow_url_fopen是否为on,以及file_get_contents函数是否被禁用。首先,我应该考虑用户可能使用的不同方法来查看这些配置,比如使用phpinfo()函数或者命令行工具。另外,用户可能没有服务器的直接访问权限,所以需要提供多种方法。 首先,关于php_openssl.dll扩展的启用。在PHP的配置文件php.ini中,extension=php_openssl.dll这一行如果前面有分号,表示被注释掉了,也就是未启用。用户需要检查这个行是否存在且没有分号。不过,不同版本的PHP可能扩展文件名不同,比如PHP7之后可能使用openssl.so或者其他名称,这点需要提醒用户注意版本差异。 然后是allow_url_fopen选项。这个选项同样在php.ini中,通常位于“PHP Core”部分。用户需要找到allow_url_fopen = On这一行,确认其值为On。如果设置为Off,则无法使用file_get_contents访问远程URL。此外,某些托管服务可能会禁用这个选项,用户可能需要联系主机提供商。 接下来,检查file_get_contents是否被禁用。这涉及到disable_functions这个配置选项。用户需要查看php.ini中的disable_functions列表,确认其中没有包含file_get_contents。如果有的话,这个函数就被禁用了,可能需要修改配置或者联系管理员。 用户可能不知道如何找到php.ini的位置,所以需要指导他们通过phpinfo()查找Loaded Configuration File的路径。或者直接在脚本中使用php_ini_loaded_file()函数。 另外,使用命令行检查也是一个方法,特别是对于有shell访问权限的用户。比如运行php -i | findstr "openssl"来快速查找openssl扩展的信息,或者在Linux下使用grep。不过需要注意不同操作系统的命令差异,比如Linux用grep,Windows用findstr。 还需要提醒用户,修改php.ini后需要重启Web服务器(如Apache或Nginx)才能使配置生效。如果用户没有权限修改php.ini,可能需要联系主机提供商。 最后,测试file_get_contents是否可用,可以建议用户编写一个简单的测试脚本,尝试读取一个本地文件或者使用http协议(如果allow_url_fopen已开启)。如果出现警告或错误,可以进一步诊断问题。 总结步骤:1. 使用phpinfo()或命令行查看配置;2. 检查php.ini中的相关设置;3. 测试函数是否可用。需要确保每一步都清晰,并提供备选方法,以适应不同用户的环境。</think>要检查PHP配置中`extension=php_openssl.dll`是否启用、`allow_url_fopen`是否开启以及`file_get_contents`是否被禁用,可以通过以下步骤操作: --- ### 一、通过`phpinfo()`查看配置 1. **创建PHP测试文件** 新建一个文件(如`info.php`),写入以下内容: ```php <?php phpinfo(); ?> ``` 2. **通过浏览器访问该文件** 在URL栏输入`http://你的域名或IP地址/info.php`,打开页面后搜索以下关键词: - **检查openssl扩展**:搜索`openssl`,若显示`OpenSSL support => enabled`,则扩展已启用[^1]。 - **检查allow_url_fopen**:搜索`allow_url_fopen`,确认其值为`On`。 - **检查禁用函数**:搜索`disable_functions`,若结果中未包含`file_get_contents`,则说明该函数未被禁用。 --- ### 二、通过命令行快速检查 1. **查看openssl扩展状态** 运行命令: ```bash php -m | grep openssl # Linux/Mac php -m | findstr openssl # Windows ``` 若输出包含`openssl`,则扩展已启用。 2. **查看allow_url_fopen状态** 运行命令: ```bash php -i | grep allow_url_fopen # Linux/Mac php -i | findstr allow_url_fopen # Windows ``` 确认结果为`allow_url_fopen => On => On`。 3. **查看禁用函数列表** 运行命令: ```bash php -i | grep disable_functions # Linux/Mac php -i | findstr disable_functions # Windows ``` 若结果中无`file_get_contents`,则函数可用。 --- ### 三、直接检查`php.ini`文件 1. **定位php.ini文件路径** 通过`phpinfo()`页面中的`Loaded Configuration File`字段找到`php.ini`路径,或运行: ```bash php --ini ``` 2. **修改关键配置项** 打开`php.ini`,检查以下配置: ```ini ; 启用openssl扩展(去掉行首分号) extension=openssl # PHP 7+可能为extension=openssl.so或直接启用 ; 确保allow_url_fopen为On allow_url_fopen = On ; 检查disable_functions是否包含file_get_contents disable_functions = ...,file_get_classes,... # 若无则安全 ``` **注意**:修改后需重启Web服务器(如Apache/Nginx)生效[^1]。 --- ### 四、测试`file_get_contents`是否可用 编写测试脚本: ```php <?php $content = @file_get_contents("https://example.com"); if ($content === false) { echo "file_get_contents被禁用或配置错误"; } else { echo "函数可用"; } ``` 若输出警告`failed to open stream`,可能因`allow_url_fopen=0`或函数被禁用[^1]。 --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值