start ssl证书申请
- 首先在start ssl网站注册一个账号
- 登录后进入登录页面,点击
Validations Wizard
,并选择Domain Validation
,添加一个新的域名
- 点击
Certificates Wizard
,选择申请Web Server SSL,一直按照向导,进入到填写信息的页面。
- 填写需要https的域名的主机。只能填同一个域名的,只能最多填5个。第一个会被认为是主host
- 选择使用KPI System生成秘钥,下载生成好的私钥
证书会很快生成,然后从startssl网站的右边栏点击SSL/TLS的卡片的域名,下载证书文件。
把下载好的私钥上传到服务器上,假设名字是
mydomain.secure.key
。 解压证书文件,把名字有nginx的crt文件上传到服务器,假设名字是mydomain.crt
配置服务器
- 生成未加密的private key
openssl rsa -in mydomain.secure.key -out mydomain.key
- 生成dhparam
openssl dhparam -out dhparams.pem 2048
- 配置nginx配置文件
注意nginx的默认ssl配置选项存在诸多漏洞。
- Weak Diffie-Hellman (DH) key exchange parameters
通过手动生成2048长度的dhparams并设置,可修正。这里是这个漏洞的报告- POODLE Attack. SSLv3存在严重漏洞
去掉ssl_protocols中的SSLv3选项,即可修正。
server {
listen 80;
server_name mydomain.com www.mydomain.com;
return 301 https://www.mydomain.com$request_uri;
}
server {
listen 443;
ssl on;
ssl_certificate /etc/nginx/certs/mydomain.crt;
ssl_certificate_key /etc/nginx/certs/mydomain.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #注意这里不能有SSLv3, SSLv3有严重漏洞
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/certs/dhparams.pem;
....
}
- 重启nginx服务
sudo nginx -s reload
测试安全性
可以在ssllabs进行检测https配置是否安全