因为现在开发的职评网项目关系到人才数据比较重要,加上里面涉及到支付方面,所以后期必须用上https保证传输不被截取破解。网上有很多概念性的说明和讲解,例如下面这几篇:
在这里记录下一些自己觉得比较关键的内容。
https涉及到加密算法有:
对称性加密:aes, rc4, des3
非对称加密:rsa, dsa/dss
Hash算法:md5, sha1, sha256
CA: (Certificate Authority)
数字证书认证机构
SRCA: (Sinorial Certificate Authority)
中铁数字证书认证机构,12306用的证书就是有此CA签发的
CRL: (Certificate Revocation List)
证书吊销列表
CDP: (CRL Distribution Point)
证书吊销列表分发点,是含在数字证书中的一个可以供各种应用下载的最新CRL的位置信息
OCSP: (Online Certificate Status Protocol)
证书状态在线查询协议, 是 IETF 颁布的用于实时查询数字证书在某一时间是否有效的标准。一般 CA 都只是 每隔一定时间 ( 几天或几个月 )
才发布新的吊销列表,可以看出: CRL 是 不能及时反映证书的实际状态的。而 OCSP 就能满足实时在线查询证书状态的要求。它为电子商务网站提供了一种实时检验数字证书有效性的途径,比下载
和处理 CRL 的传统方式更快、更方便和更具独立性。请求者发送查询请求, OCSP 服务器会返回证书可能的三个状态:正常、吊销和未知。
使用openssl生成证书
1.生成RSA秘钥
$ openssl genrsa -des3 -out yangxg.key 2048
Generating RSA private key, 2048 bit long modulus
...................................+++
.................................................................+++
e is 65537 (0x10001)
Enter pass phrase for yangxg.key:
Verifying - Enter pass phrase for yangxg.key:
2.生成证书请求文件(CSR : Cerificate Signing Request)
$ openssl req -new -key yangxg.key -out yangxg.csr
Enter pass phrase for yangxg.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:cn
State or Province Name (full name) [Some-State]:gd
Locality Name (eg, city) []:gz
Organization Name (eg, company) [Internet Widgits Pty Ltd]:yangxg
Organizational Unit Name (eg, section) []:yangxg
Common Name (e.g. server FQDN or YOUR name) []:yangxg
Email Address []:yangxuguangvip@163.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
$ ls
yangxg.csr yangxg.key
3.前往 CA 申请颁发证书,以下是知乎查到的一些结果:SSL 证书服务,大家用哪家的?
如果是个人用户,可以选择便宜甚至免费的DV证书。
1、Let's Encrypt:免费,快捷,支持多域名(不是通配符),三条命令即时签署+导出证书。缺点是暂时只有三个月有效期,到期需续签。
2、StartSSL免费DV证书:免费,有效期是一年,比Let's Encrypt长。
3、Comodo PositiveSSL:便宜,单年9美刀,如果签三年大概每年4至5美刀。可签署ECC SSL证书。
4、RapidSSL:单年签署价格同PositiveSSL,并没有什么优缺点。
5、沃通(Wosign)免费DV证书:免费,签发快,界面和官方资料都是中文。问题是上次CNNIC的二级CA冒签Gmail的证书引起争议,在国内有些人预防性拉黑所有国内CA的证书,包括沃通的。他们浏览你的站点时会被拦截和警告。
我这边在沃通里申请了2年的免费ssl证书
下载回来的压缩包里有对应不同代理服务器使用的证书
4.配置nginx
server
{
listen 80;
server_name www.yangxg.com;
#80端口跳转到443端口
rewrite ^(.*) https://$server_name$1 permanent;
}
server
{
listen 443;
root /data/www;
index index.html index.htm index.php;
server_name www.yangxg.com;
ssl on;
ssl_certificate /data/ssl/yangxg.crt;
ssl_certificate_key /data/ssl/yangxg.key;
location / {
try_files $uri $uri/ =404;
if (-f $request_filename/index.php) {
rewrite (.*) $1/index.php;
}
#如果没有找到指定目录文件,那么重写路由加上index.php
#如果找到,这表明它是一个资源,无需经过web php处理直接返回
#如果把资源统一放到另外一台服务器管理, 那么web这边不应该存在任何资源文件给客户端访问到
if (!-f $request_filename) {
rewrite (.*) /index.php;
}
}
#调用php web服务器
location ~ .*\.(php|php5)?$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
#图片缓存时间设置
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 10d;
}
#JS和CSS缓存时间设置
location ~ .*\.(js|css)?$ {
expires 5h;
}
}
第3步我们还是可以自己给自己颁发证书,但浏览器访问时会给予警告,表示此证书来源不明。
openssl x509 -req -days 365 -in yangxg.csr -signkey yangxg.key -out yangxg.crt