给自己的站点添加SSL证书

前段时间看了一点关于SSL的知识,给自己站也做了一个HTTPS的访问,当然这个是自行颁发不受浏览器信任的SSL证书,如果需要浏览器信任的证书需要向权威机构申请。整个设置大致流程如下:

生成秘钥

秘钥Key,也称私钥,openssl会提示输入一个密码,可以输入,也可以不输,输入的话,以后每次使用这个key的时候都要输入密码,安全起见,还是应该有一个密码保护。使用命令如: openssl genrsa (可选-des3) -out server.key 2048/1024/4096等

1
$ openssl genrsa -des3 -out server.key 4096

执行回车后输入密码再次回车输入确认密码即可,则在当前目录生成了server.key文件,具体可参见如下图:

1

生成CSR证书

使用上面生成的Key,生成一个certificate signing request (CSR)。如果生成的key有密码保护,openssl首先会询问刚才设置的密码,然后需要你填写一系列问题,其中Common Name(CN)是最重要的,它代表你的证书要代表的目标,如果你为网站申请的证书,就要添你站点的域名。

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

执行完成之后则在当前目录生成了server.csr文件,如下图所示

2

上图中需要填写的信息也可以作为配置信息,不用每次都进行填写,于是可以将这些信息设置为默认信息,如下:
找到 /etc/pki/tls/openssl.cnf 配置文件(修改默认设置)
查找[ req_distinguished_name ] 模块下面的

1
2
3
4
5
countryName_default = XX
stateOrProvinceName_default = Default Province
localityName_default = Default City
0.organizationName_default = Default Company Ltd
organizationalUnitName_default =

修改为

1
2
3
4
5
countryName_default = CN
stateOrProvinceName_default = Beijing
localityName_default = Beijing
0.organizationName_default = YHV5.COM
organizationalUnitName_default = YHV5.COM

除了上面CN需要认真填写,其他默认值都可随意填写没有要求限制。

生成Self Signed证书

1
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

server.crt就是我们生成的证书了,执行过程中直接输入y回车即可。到目前为止,生成了server.crt文件,就已经得到了整个SSL的秘钥文件。
另外一个比较简单的方法就是用下面的命令,一次生成key和证书

1
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt

配置nginx中ssl的模块

1
2
3
4
5
6
7
8
9
10
11
server {
server_name hostname;
listen 443;
ssl on;
ssl_certificate server.crt;
ssl_certificate_key server.key;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
ssl_prefer_server_ciphers on;
}

开启443端口设置防火墙

1
2
$ iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 443 -j ACCEPT
$ service iptables save

重启nginx服务

1
$ /usr/local/nginx/sbin/nginx -s reload

最后浏览访问https://hostname 即可。
另外申请权威机构的证书文件可以向http://www.startssl.com/ 注册申请,过程有点麻烦,但最后还是可以实现。

(The End)

坚持原创技术分享,您的支持将鼓励我继续创作!