最近做了一个招商银行支付对接,要求使用SHA1WithRSA算法校验, “ 成功签约结果通知 ” 和 “ 成功支付结果通知 ” 接收到的通知报文进行验签。招商银行给出的文档如下

此文档写的有问题,导致PHP无法成功的校验签名真伪。问题如下

1.noticeData不能转为小写,转了必挂

2.在解密前必须给签名base64_decode一下

3.获取招商银行公钥必须手动加上标准证书头 begin end

 

找到这些问题,SHA1WithRSA就迎刃而解了,用到的PHP函数只有一个  openssl_verify 核心代码如下:

$pub_key_id = '-----BEGIN PUBLIC KEY-----'.PHP_EOL.$publicKey.PHP_EOL.'-----END PUBLIC KEY-----';
$bool = openssl_verify($data, base64_decode($signature) ,$pub_key_id,OPENSSL_ALGO_SHA1); //如果签名正确返回 1, 签名错误返回 0, 内部发生错误则返回false

我的环境是php5.6

在和第三方支付接口对接时经常会对数据进行签名和验签,sha1WithRSA也算是比较常用的一种签名加密算法。php开启openssl库后实现起来也算比较简单。
我在这里使用sha1withRSA算法来实现数据的加密签名和验签,其中公钥和私钥均读取自接口方提供的.pfx证书文件。

以下是使用私钥进行签名的代码示例,注意其中在return前对生成的签名密文进行base64编码:

/**
* 签名 生成签名串 基于sha1withRSA
* @param string $data 签名前的字符串
* @return string 签名串
* @link www.zh30.com
*/
function sign($data) {
$certs = array();
openssl_pkcs12_read(file_get_contents(“你的.pfx文件路径”), $certs, “password”); //其中password为你的证书密码
if(!$certs) return ;
$signature = ”;
openssl_sign($data, $signature, $certs[‘pkey’]);
return base64_encode($signature);
}
验签时使用公钥,也就是.pfx文件中的cert KEY:

/**
* 验签 验证签名 基于sha1withRSA
* @param $data 签名前的原字符串
* @param $signature 签名串
* @return bool
* @link www.zh30.com
*/
function verify($data, $signature) {
$certs = array();
openssl_pkcs12_read(file_get_contents(“你的.pfx文件路径”), $certs, “password”);
if(!$certs) return ;
$result = (bool) openssl_verify($data, $signature, $certs[‘cert’]); //openssl_verify验签成功返回1,失败0,错误返回-1
return $result;
}

转载: https://www.zh30.com/php-sha1withrsa-sign-verify-pfx.html

 

sha1withrsa

redis有两个方案都可以只允许某些ip访问

1.redis.conf 修改bind 并重启
bind 192.168.1.100 10.0.0.1

2.使用iptables
iptables -A INPUT -s 10.19.42.53 -p tcp –dport 6379 -j ACCEPT
iptables -A INPUT -s 10.19.190.32 -p tcp –dport 6379 -j ACCEPT
iptables -A INPUT -s 10.19.165.206 -p tcp –dport 6379 -j ACCEPT
iptables -A INPUT -p TCP –dport 6379 -j REJECT

假定一个场景:某个网站它可能不希望被网络爬虫抓取,例如测试环境不希望被抓取,以免对用户造成误导,那么需要在该网站中申明,本站不希望被抓取。有如下方法:

方法一:修改nginx.conf,禁止网络爬虫的ua,返回403。

server {

listen 80;
server_name 127.0.0.1;

#添加如下内容即可防止爬虫

if ($http_user_agent ~* “qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot”)
{
return 403;
}

方法2:网站更目录下增加Robots.txt,放在站点根目录下。

在http://tool.chinaz.com/robots/站点可以针对现在的搜索引擎按照想要的规则生成robots.txt文件。

知识扩展:

robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的。

当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。百度官方建议,仅当您的网站包含不希望被搜索引擎收录的内容时,才需要使用robots.txt文件。如果您希望搜索引擎收录网站上所有内容,请勿建立robots.txt文件。
Robots协议是国际互联网界通行的道德规范,基于以下原则建立:
1、搜索技术应服务于人类,同时尊重信息提供者的意愿,并维护其隐私权;
2、网站有义务保护其使用者的个人信息和隐私不被侵犯。
当然,如果搜索引擎不遵守约定的Robots协议,那么通过在网站下增加robots.txt也是不起作用的。(在正式环境中,可以适当允许搜索引擎抓取收录)

转载:http://www.webkaka.com/tutorial/zhanzhang/2017/061069/

nginx防蜘蛛处理