https部署折腾(二):OpenSSL通过PEM格式私钥生成用于申请SSL证书的CSR文件

CSR,全称Certificate Signing Request,译为证书签发请求,就是用于申请证书的,放在文本文件中的,一串字符,获取方式通过私钥生成。

既然要使用SSL加密,那么需要了解非对称加密,这个其实比较理论,就大概介绍一下。

有种算法叫做RSA非对称算法,通过这个算法可以获得两个密钥,一个叫公钥,用于加密数据,一个叫私钥,用于解密数据,这两个密钥是不同的,所以叫做非对称加密,好处是只用把公钥给加密方,一旦加密后只有私钥才能打开,而私钥是不会公开的,所以相对安全,即比对称加密安全(加解密的密钥相同)。而SSL就是利用了非对称加密(当然,也使用到了对称加密,这里只说非对称加密),如果要使用SSL,首先需要一对密钥,即公钥和私钥。那么密钥和CSR以及SSL证书有什么关系呢?其实简单来说SSL证书就是公钥,而CSR用于向证书颁发商申请SSL证书,而CSR是通过私钥生成的,大概就是:私钥 -> CSR -> SSL证书(公钥+站点信息等其他信息),这样一说整个线路就连贯起来了吧。

那么为什么要使用SSL证书呢,既然我们可以自行生成私钥和公钥(证书),为什么不直接使用呢?就是因为证书没有经过认证,是可以随意篡改的,如果在数据传输环节,有人更改了证书,即更改了公钥,那么数据落入他人之手后,就可以利用生成伪造证书的私钥进行解密,这样根本就是不安全的,而如果证书认证过,就无法被篡改,因为一旦篡改,浏览器就会提示证书不安全了。所以,要使用认证的证书。

(好吧,理论还是不在行,上面的话看看就好,具体的请百度)

下面来说说怎么生成私钥对,以及如何生成CSR文件:

继续阅读

PHP RSA加解密长数据

前文《PHP RSA加解密运算》已述主题,接下来就是PHP使用openssl做RSA加解密任意长度字符串的方法。前文所述,使用1024位的RSA密钥只能加密117字节的数据,那如果需要加密的数据长度超过117字节应该怎么加解密呢?其实很简单,只需要把待加密的数据分解成一个一个不超过117字节的数据块,分别加密之后再拼接就可以了,又因为RSA密文长度和模长度(这里是1024位,128字节)一样,所以解密的时候只需要把密文分解成每段128字节的数据,分别解密后再拼接起来就可以了。
继续阅读

PHP RSA加解密运算

为了充分利用本服务器空间,做个后台来支持客户端,因为这个服务器只提供了PHP支持,所以,只能现上PHP了,使用PHP框架开发是最快的了,就像J2EE使用Struts/Spring/Hibernate那样。我是选了CodeIgniter,因为看到有评论说CI是最易学的,实践表明CI的确很容易使用。但是似乎CI没提供安全相关(主要是密钥加解密,更主要是RSA的)的功能,所以我开始搜寻PHP做RSA运算的方法,网上能搜到一大堆,但是大多都是要装这样扩展那样扩展,说得很复杂而且很坑爹,我这里的服务器不可能做这样那样的扩展安装。不过最后,终于还是让我找到了一个合适的方法,而且很方便简单,如下便是。
继续阅读