如何创建一个自签名的SSL证书【转】

2017-5-1 寒川 计算机

引言
使用HTTP(超文本传输)协议访问互联网上的数据是没有经过加密的。也就是说,任何人都可以通过适当的工具拦截或者监听到在网络上传输的数据流。但是有时候,我们需要在网络上传输一些安全性或者私秘性的数据,譬如:包含信用卡及商品信息的电子订单。这个时候,如果仍然使用HTTP协议,势必会面临非常大的风险!相信没有人能接受自己的信用卡号在互联网上裸奔。
HTTPS(超文本传输安全)协议无疑可以有效的解决这一问题。所谓HTTPS,其实就是HTTP和SSL/TLS的组合,用以提供加密通讯及对网络服务器的身份鉴定。HTTPS的主要思想是在不安全的网络上创建一安全信道,防止黑客的窃听和攻击。
SSL(安全套接层)可以用来对Web服务器和客户端之间的数据流进行加密。
SSL利用非对称密码技术进行数据加密。加密过程中使用到两个秘钥:一个公钥和一个与之对应的私钥。使用公钥加密的数据,只能用与之对应的私钥解密;而使用私钥加密的数据,也只能用与之对应的公钥解密。因此,如果在网络上传输的消息或数据流是被服务器的私钥加密的,则只能使用与其对应的公钥解密,从而可以保证客户端与与服务器之间的数据安全。
数字证书(Certificate)
在HTTPS的传输过程中,有一个非常关键的角色——数字证书,那什么是数字证书?又有什么作用呢?
所谓数字证书,是一种用于电脑的身份识别机制。由数字证书颁发机构(CA)对使用私钥创建的签名请求文件做的签名(盖章),表示CA结构对证书持有者的认可。数字证书拥有以下几个优点:
使用数字证书能够提高用户的可信度
数字证书中的公钥,能够与服务端的私钥配对使用,实现数据传输过程中的加密和解密
在证认使用者身份期间,使用者的敏感个人数据并不会被传输至证书持有者的网络系统上
X.509证书包含三个文件:key,csr,crt。
key是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密
csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名
crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息
备注:在密码学中,X.509是一个标准,规范了公开秘钥认证、证书吊销列表、授权凭证、凭证路径验证算法等。
创建自签名证书的步骤
注意:以下步骤仅用于配置内部使用或测试需要的SSL证书。
第1步:生成私钥
使用openssl工具生成一个RSA私钥
openssl genrsa -des3 -out server.key 2048
说明:生成rsa私钥,des3算法,2048位强度,server.key是秘钥文件名。
注意:生成私钥,需要提供一个至少4位的密码。
第2步:生成CSR(证书签名请求)
生成私钥之后,便可以创建csr文件了。
此时可以有两种选择。理想情况下,可以将证书发送给证书颁发机构(CA),CA验证过请求者的身份之后,会出具签名证书(很贵)。另外,如果只是内部或者测试需求,也可以使用OpenSSL实现自签名,具体操作如下:
openssl req -new -key server.key -out server.csr

说明:需要依次输入国家,地区,城市,组织,组织单位,Common Name和Email。其中Common Name,可以写自己的名字或者域名,如果要支持https,Common Name应该与域名保持一致,否则会引起浏览器警告。
 
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Beijing
Locality Name (eg, city) []:Beijing
Organization Name (eg, company) [Internet Widgits Pty Ltd]:joyios
Organizational Unit Name (eg, section) []:info technology
Common Name (e.g. server FQDN or YOUR name) []:demo.joyios.com
Email Address []:liufan@joyios.com
 
第3步:删除私钥中的密码
在第1步创建私钥的过程中,由于必须要指定一个密码。而这个密码会带来一个副作用,那就是在每次Apache启动Web服务器时,都会要求输入密码,这显然非常不方便。要删除私钥中的密码,操作如下:
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
 
第4步:生成自签名证书
如果你不想花钱让CA签名,或者只是测试SSL的具体实现。那么,现在便可以着手生成一个自签名的证书了。
需要注意的是,在使用自签名的临时证书时,浏览器会提示证书的颁发机构是未知的。
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
说明:crt上有证书持有人的信息,持有人的公钥,以及签署者的签名等信息。当用户安装了证书之后,便意味着信任了这份证书,同时拥有了其中的公钥。证书上会说明用途,例如服务器认证,客户端认证,或者签署其他证书。当系统收到一份新的证书的时候,证书会说明,是由谁签署的。如果这个签署者确实可以签署其他证书,并且收到证书上的签名和签署者的公钥可以对上的时候,系统就自动信任新的证书。
第5步:安装私钥和证书
将私钥和证书文件复制到Apache的配置目录下即可,在Mac 10.10系统中,复制到服务器对应目录中即可。

标签: 计算机 linux web apache ssl https

评论(0) 浏览(2928)

gb2312编码页面post到utf-8页面乱码解决方案

2010-4-22 寒川 网页编程

说实话,要是所有网站都采用统一编码,根本就不会出现这样或那样的编码问题,不过现在的问题是既然已经存在了n种编码了,总得想办法解决吧。由于目前国内gb2312、utf-8的编码网站较多(big5等忽略不计),当想gb2312从页面提交表单至utf-8时,问题就来了。解决方案:
在gb2312页面的form中添加:accept-charset="utf-8" onsubmit="document.charset='utf-8';",如:
<form method="post" action="2.php" accept-charset="utf-8" onsubmit="document.charset='utf-8';">
这样一来,ie、ff、opera、google等主流浏览器都欣然接受了。但是当提交后直接后退这又出现新问题了,form页面变成乱码,别怕,再在gb2312页面的<head></head>之间加上如下代码:
<script>
if(document.charset!="gb2312" && navigator.userAgent.indexOf("MSIE")>0){
       window.location.reload();
}
</script>
至此,问题得以完美解决。

标签: html 编程 web 编码

评论(6) 浏览(9232)

批量设置连接在新窗口打开

2010-3-4 寒川 网页编程

今天遇到个问题,需要使框架中的链接在新窗口中打开,但是被嵌入的框架页面中连接n多,有没有个简单的代码一下就搞定呢?其实很简单,在被嵌入框架的页面的<head></head>之间加入<base target=”_blank”>,问题就解决了。呵呵,这些再简单不过的东西可不能忘记了啊。

标签: html 脚本 编程 web it

评论(0) 浏览(12546)

session实现两个页面处理由一个form提交的数据

2010-1-21 寒川 网页编程

近日有朋友问道如何才能一个form提交数据给两个页面处理,想想其实应该比较简单的。先是一个页面获取form提交过来的数据直接处理,处理完成后将数 据记录在session中,传递给另一个页面就ok了。不管是asp还是php都能简单地实现。当然,在第二个页面处理完成后记得将session清除 哦。。

标签: html php 编程 asp 札记 web

评论(0) 浏览(8033)

Powered by emlog 蜀ICP备12030225号

川公网安备 51042102000001号

sitemap