星期二, 十月 23, 2012

使用openssl制作自签名的CA并签名自己的网站


Https可以很大程序上提高网站安全性,防止网站和用户通信被第三方获得。但是要使用https就必需要有证书,证书由可信CA(Certificate Authority)颁发,但是这种证书价钱非常高,一般每年收费100美元以上,而且,对于某些针对性很强的网站(比如机构内部网站),并不需要全局可信的证书,所以很多情况下,可以用自签名的证书代替。制作自签名的证书可以用Windows Server版自带的CA工具,更多的情况下,用的是openssl证书工具。使用openssl签名证书相关的工作主要有CA生成、证书请求生成和证书签名。使用工具主要是openssl自带的CA.pl工具,路径为/usr/lib/ssl/misc/CA.pl.
1. CA生成。自签名证书可以直接制作,但是首先制作一个自签名CA,然后再给网站签署证书,更便于管理,而且安全性也更有保证。使用命令
/usr/lib/ssl/misc/CA.pl -newca
可以生成一个自签名的CA. 首先要输入私钥保护密码(必须),然后是其他信息,主要需要用户输入的信息为:
  • Country Name - 国家名(美国US,中国CN)
  • State or Province Name - 行政省或州名 (Hubei, California)
  • Locality Name - 城市名(Wuhan, Los Angeles)
  • Organization - 公司名(My Company)
  • Organizational Unit Name - 公司中的部门名称(Network Security Department)
  • Common Name - 通用名(注意:这是最重要的部分,它是区分你跟其他CA的标记名,如果你在做一个自签名网站的话,这里应该输入网址。对于CA,输入XXX CA, My CA类似的名字)
  • Email Address - 管理员信箱不解释
下面除询问私钥密码时必须输入外(共三次密码输入中的第二次),其它问题应该都可以忽略。使用默认的配置生成的CA有效期有3年,修改可以在CA.pl中查找CADAYS设置。默认的签名证书有效期只有1年,在CA.pl中DAYS变量设置。
默认情况下证书加密使用的是1024bit,建议修改为2048bit以上,在/etc/ssl/openssl.cnf中
default_bits            = 1024
默认hash算法是sha1,如果需要可以选择更强的sha256或者sha512. 不建议使用md5. 也在此配置文件中修改。
2. 生成证书请求,不管是用自签名还是让可信CA签名,都需要首先生成证书请求。使用命令
/usr/lib/ssl/misc/CA.pl -newreq
输入信息方式同生成CA时。生成newreq.pem提交到自签名CA或者可信CA进行签名。不过为了后面安装设置方便,需要把当前私钥的保护密码删除(除非你想在每次apache启动时手动输入密码),命令为
openssl rsa -in newkey.pem -out newkey.nopass.pem
证书签名完成以后配置apache时,密钥文件使用应该使用newkey.nopass.pem,不要用newkey.pem.
3. 用自签名CA给签署证书请求,确保当前目录下存在demoCA和newreq.pem文件,命令为
/usr/lib/ssl/misc/CA.pl -sign
签名完成的证书在newcert.pem文件中。配置apache使用cacert.pem(demoCA文件夹内)、newcert.pem和newkey.nopass.pem三个文件即可实现https访问。
当然也可以直接在第一步的Common Name中输入网站名称,生成自签名证书,但是这样会有两个问题:一是管理不方便,机构内有几个网站,就需要用户导入几次证书,而使用CA的方式用户只需导入CA证书即可;二是密钥和证书在同一服务器上,如果安全出现问题比较麻烦,相比之下CA方式只要CA私钥安全吊销证书即可。

没有评论: