编译安装时候加上这个--with-http_ssl_module

生成两个文件443.crt和443.key。crt是证书,key是私钥

1、先生成私key文件,再用之生成加密的私key文件
openssl genrsa -des3 -out p.key
随便写个密码
openssl rsa -in p.key -out 443.key
输入一遍建立p.key的那个密码,使用443.key的时候就不需要密码了

2、生成证书请求文件csr

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

Common Name要写此证书是用于哪个域名的,比如*.51cto.com

3、用证书请求文件csr和私key文件生成一个十年期限的CA证书crt文件
openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey 443.key -in 443.csr -out 443_CA.crt

4、生成被CA证书文件签名过的证书文件crt

openssl x509 -req -days 3650 -in 443.csr -extensions v3_usr -CA 443_CA.crt -CAkey 443.key -CAcreateserial -out 443.crt

第四步也可以不执行,只需在下文的nginx配置文件里,把443.crt换成443_CA.crt。

5、如果第一步中没有把key的密码去掉,使用这种带密码的key文件的时候,每次reload nginx都需要输入密码且reload是失效的,只能stop后再启动nginx才可以,所以还是要把密码去掉的,用下面的命令剥离掉密码,假设crt文件是用p.key这个带密码的建立出来的。

openssl rsa -in p.key -out p.key.unsecure

然后在下面的nginx配置文件里的key的地方,写上这个unsecure的就可以了。


 

http,nginx配置文件里这样写

server {
        listen       80;

        server_name ~^(.*);

    location / {
        resolver 172.16.168.2;
        proxy_pass http://$http_host$request_uri;
        proxy_set_header Host $http_host;

 

https,nginx配置文件里这样写

server {
        listen       443 ssl;

        ssl on;

        server_name ~^(.*);

        ssl_certificate /usr/local/nginx/conf/keys/443.crt;
        ssl_certificate_key /usr/local/nginx/conf/keys/443.key;

        #ssl_certificate_key /usr/local/nginx/conf/keys/p.key.unsecure;

     location / {
        resolver 172.16.168.2;
        proxy_pass https://$http_host$request_uri;
        proxy_set_header Host $http_host;

 

客户端用https访问url肯定会看到不是安全连接的警告,用户只有忽略警告,才能正常访问。这就是不找认证机构交保护费导致的!hoho