越来越多的网站开始使用https,而颁发证书的这些机构就叫CA,当然我们自己也能做CA,只是浏览器不认可而已,所以那些颁发可信赖证书的机构就要收费。若是在本地测试的话,自己颁发就可以了。
服务器:CentOS 6.4(虚拟机下)
一、使用 OpenSSL 生成CA证书
一般linux都默认安装了 OpenSSL,若没有安装 ,执行
yum install openssl
配置文件在 /etc/pki/tls/openssl.cnf
主要目录:/etc/pki/CA
以下命令都是在 这个目录下执行的
1、生成私钥
cd /etc/pki/CA/ touch index.txt serial echo 01 > serial openssl genrsa -out private/cakey.pem 2048
index.txt —— 用来存放已颁发证书的信息
serial —— 最后一次颁发证书的序列号
2、生成证书请求
openssl req -new -x509 -key private/cakey.pem -out cacert.pem
输入国家省份等信息
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:ChongQing
Locality Name (eg, city) [Default City]:ChongQing
Organization Name (eg, company) [Default Company Ltd]:jam00
Organizational Unit Name (eg, section) []:jam00
Common Name (eg, your name or your server's hostname) []:jam00.com
Email Address []:jam00@vip.qq.com
3、生成服务器端私钥( nginx.key )
openssl genrsa -out nginx.key 2048
4、生成服务器端证书签名请求文件(nginx.csr)
openssl req -new -key nginx.key -out nginx.csr
输入省份,公司等信息
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:ChongQing
Locality Name (eg, city) [Default City]:ChongQing
Organization Name (eg, company) [Default Company Ltd]:jam00.com
Organizational Unit Name (eg, section) []:jam00.com
Common Name (eg, your name or your server's hostname) []:jam00.com
Email Address []:jam00@vip.qq.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:jam00
challenge password 不用填写,若填写,重启nginx服务器时要输入这里填写的密码
5、利用CA证书进行签名
openssl ca -in nginx.csr -out nginx.crt
将显示如下信息,输入 y / y 就可以
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Oct 19 07:20:25 2017 GMT
Not After : Oct 19 07:20:25 2018 GMT
Subject:
countryName = CN
stateOrProvinceName = ChongQing
organizationName = jam00.com
organizationalUnitName = jam00.com
commonName = jam00.com
emailAddress = jam00@vip.qq.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
36:C4:70:DD:73:C7:3B:9C:41:FD:E9:A4:91:03:C0:B1:78:9E:4F:1D
X509v3 Authority Key Identifier:
keyid:67:82:78:F2:E5:BA:A0:47:6D:F1:BA:FD:2B:90:5B:83:AD:EA:2B:37
Certificate is to be certified until Oct 19 07:20:25 2018 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
二、Nginx 配置 https
nginx.conf 配置
server { listen 443 ssl; ssl on; ssl_certificate /etc/pki/CA/nginx.crt; ssl_certificate_key /etc/pki/CA/nginx.key; server_name tests.jam00.com; index index.html index.htm index.php; root /mnt/hgfs/www/test1; } #访问80端口也重定向到https server{ listen 80; add_header Strict-Transport-Security max-age=86400; server_name tests.jam00.com; return 301 https://$server_name$request_uri; }
add_header :这里的作用是当浏览器访问过 本网站的 https 页面后,再访问本站的其他 http 页面时,将不会请求服务器再来一次301 跳转,而是浏览器直接访问 https
重启Nginx,打开443 端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
chrome 访问 tests.jam00.com
提示 “您的连接不是私密连接”,因为我们自己颁发的证书是不被浏览器认可的,没办法,不是专业机构,但是访问网站也是加密连接。
三、阿里云免费CA证书申请
阿里云没有推出免费证书之前,我用的是 https://www.startssl.com/ ,但在新版的chrome浏览器中已不再信任它的免费版(据说是因为它乱颁发...),还有IOS11 中也不信任这个证书,对于全面禁用 http 的苹果APP来说,必须要一个https的接口了。
阿里云的免费证书申请很简单,https://common-buy.aliyun.com/?commodityCode=cas#/buy 购买免费型即可
购买后去控制台 https://yundun.console.aliyun.com/?p=cas#/cas/home 补全你的信息并提交申请,免费型只支持一个域名
验证方式我选择的是文件验证,所以还要下载对应的验证文件(fileauth.txt),并上传到域名根目录下/.well-known/pki-validation目录下(这个文件目录要自己创建)
上传完成后,访问一下这个文件 http://yourdomain/.well-known/pki-validation/fileauth.txt
若成功,就点击一下下面的检查配置,若提示成功,就OK了,等一会查看状态为已签发就行了(我等了差不多五分钟)
点击下载证书,按照阿里云的提示配置即可,基本上可以按照第二步配置就行了,这里贴一个nginx的配置示例
server { listen 443; server_name localhost; ssl on; root html; index index.html index.htm; ssl_certificate cert/214299590960949.pem; ssl_certificate_key cert/214299590960949.key; ssl_session_timeout 30m; ssl_session_cache shared:SSL:10m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } }
ssl_protocols:启动特定的加密协议 TLSv1 TLSv1.1 TLSv1.2,防止使用不安全的加密协议,比如 SSLv3 就存在漏洞
ssl_ciphers:指定加密套件,防止使用不安全的加密算法,
ssl_prefer_server_ciphers:优先使用服务端的加密套件,若不指定,可能会使用浏览器的加密套件,而每个浏览器的加密套件可能不同
缓存链接状态
ssl_session_cache:设置ssl/tls会话缓存的类型和大小,10M差不多了
ssl_session_timeout:调高一下session时间 30m,默认为 5m
贴一下阿里云的帮助文档 https://help.aliyun.com/knowledge_detail/48014.html