服务器开启SSL

http://www.cnblogs.com/AloneSword/p/3809002.html
http://www.linuxidc.com/Linux/2013-08/88271.htm
https://phphub.org/topics/206

x509证书一般会用到三类文,key,csr,crt。

key 是私用密钥openssl格,通常是rsa算法。

csr 是证书请求文件,用于申请证书。在制作csr文件的时,必须使用自己的私钥来签署申请,还可以设定一个密钥。

crt是CA认证后的证书文件,签署人用自己的key给你签署的凭证(或者自行颁发不受浏览器信任的SSL证书)。

1.key的生成
# 生成一个RSA密钥
$ openssl genrsa -des3 -out server.key 2048

这样是生成rsa私钥,des3算法,openssl格式,2048位强度(或者使用1024位强度)。
注:如果是godaddy上的文件名是 : server.key, 如果是namecheap上的文件名是 : server.pem。
server.key是密钥文件名。为了生成这样的密钥,需要一个至少四位的密码。

可以通过以下方法生成没有密码的key:
# 拷贝一个不需要输入密码的密钥文件
$ openssl rsa -in server.key -out server_nopass.key
server_nopass.key就是没有密码的版本了。

2. csr的生成方法

openssl req -new -key server.key -out server.csr

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]:BeiJing
Locality Name (eg, city) []:BeiJing
Organization Name (eg, company) [Internet Widgits Pty Ltd]:The EST Group
Organizational Unit Name (eg, section) []:Dev
Common Name (e.g. server FQDN or YOUR name) []:*.phphub.org // ———-注意这个地方要认真填写
Email Address []: emailaddress @ gmail.com

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []: ———-注意不填写———-
An optional company name []: ———-注意不填写———-
需要依次输入
国家:CN
省份:Shanghai
城市:Shanghai
组织:Home
部门:home
Common Name:*.codezyw.com
email:admin@codezyw.com
最重要的是common name,可以写你的名字或者域名。如果为了https申请,这个必须和域名吻合,否则会引发浏览器警报。
这里生成的证书请求文件,你可以拿着这个文件去数字证书颁发机构(即CA)申请一个数字证书。

3. OpenSSL建立自己的CA

openssl req -new -x509 -key server.key -out ca.crt -days 3650

生成的ca.crt文件是用来签署下面的server.csr文件。

4. crt生成方法
购买细节这里省去, 需要注意的是要认准比较权威的认证机构购买.
购买成功后的证书有两个, 一个是域名证书, 一个是链证书, 把他们俩按照顺序合并为 crt 文件.
一般情况下,直接用证书签发机构颁发的域名证书crt文件即可,但是有很多证书签发机构默认在 Firefox 中文版下是不会信任的,得把证书签发机构给你的链证书crt文件合并
方法如下:
合并 server.crt (证书签发机构的 crt) 和 server.intermediate.crt (自己域名的 crt)
$ cat server.intermediate.crt >> server.crt
或者直接用记事本打开,然后复制 server.intermediate.crt 里面所有的内容到 server.crt 最下方即可。
购买成功后会给你发两个证书 server.crt 和 server.intermediate.crt, 生成最终的 server.chained.crt
cat server.crt server.intermediate.crt > server.chained.crt

不去购买证书,可以自己颁发证书给自己
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
或者自己做CA:
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt
输入key的密钥后,完成证书生成。-CA选项指明用于被签名的csr证书,-CAkey选项指明用于签名的密钥,-CAserial指明序列号文件,而-CAcreateserial指明文件不存在时自动生成。
最后生成了私用密钥:server.key和自己认证的SSL证书:server.crt
证书合并:
cat server.key server.crt > server.pem
5.修改 Nginx 配置
server {
listen 443;
server_name ***.com;
index index.html index.htm index.php;
root 网站代码目录;

ssl on;
ssl_certificate 路径/server.chained.crt;
ssl_certificate_key 路径/server_nopass.key;
# 若ssl_certificate_key使用server.key,则每次启动Nginx服务器都要求输入key的密码。
}
强制使用 HTTPS

server {
listen 80;
listen 443 ssl;
server_name example.com;

if ($scheme = http) {
return 301 https://$server_name$request_uri;
}

….
}

如果出现“[emerg] 10464#0: unknown directive “ssl” in /usr/local/nginx-0.6.32/conf/nginx.conf:74”则说明没有将ssl模块编译进nginx,在configure的时候加上“–with-
http_ssl_module”即可.

如何让浏览器信任自己颁发的证书呢?只要将之前生成的server.crt文件导入到系统的证书管理器就行了,具体方法:
控制面板 -> Internet选项 -> 内容 -> 发行者 -> 受信任的根证书颁发机构 -> 导入 -》选择server.crt

要获取受浏览器信任的证书,则需要到证书提供商处申请。证书授证中心,又叫做CA机构,为每个使用公开密钥的用户发放一个数字证书。浏览器在默认情况下内置了一些CA机构的证书,使
得这些机构颁发的证书受到信任。VeriSign即是一个著名的国外CA机构,工行、建行、招行、支付宝、财付通等网站均使用VeriSign的证书,而网易邮箱等非金融网站采用的是中国互联网信
息中心 CNNIC颁发的SSL证书。一般来说,一个证书的价格不菲,以VeriSign的证书为例,价格在每年8000元人民币左右。

据说也有免费的证书可以申请。和VeriSign一样,StartSSL也 是一家CA机构,它的根证书很久之前就被一些具有开源背景的浏览器支持(Firefox浏览器、谷歌Chrome浏览器、苹果Safari浏
览器等)。后 来StartSSL竟然搞定了微软:在升级补丁中,微软更新了通过Windows根证书认证(Windows Root Certificate Program)的厂商清单,并首次将StartCom公司列入了该认证清
单。现在,在Windows 7或安装了升级补丁的Windows Vista或Windows XP操作系统中,系统会完全信任由StartCom这类免费数字认证机构认证的数字证书,从而使StartSSL也得到了IE浏览器
的支持。(来源及申请步骤)
Google最新版本中出现加密算法过时?其他浏览器提示加密算法过时该如何处理?

网站配置SSL证书后,Google的Chrome(比如版本为:V43.0)浏览器https访问会出现“采用过时的加密套件进行了加密”,如何使Chrome浏览器采用“新型加密套件进行了加密”,这就需要
升级新型SSL加密套件,改变WEB服务器配置文档里的一些设置,增强HTTPS安全性(防止被Chrome识别为过时的加密套件)。

本篇就是教你指定“新型”加密套件,符合Chrome的要求,符合SSL Labs(它其实是SSL服务器测试网站)评价“A”的标准。

参考资料如下:

http://www.oschina.net/translate/strong_ssl_security_on_nginx(资料里面有很清晰的说明)