个坑,埋点土,数个一二三四五。种十块,翻一倍,其实这事挺惭愧。
其实总体来说这并不难,但就是像穿针引线,差一点点那就会前功尽弃。 多的不说了,想必都查过其他的资料。什么依赖关系啊,OpenSSL必装神马的就不赘述了。 就直接说两点吧,生成证书和nginx.conf的配置。
这里感谢廖雪峰老师(叩谢) 廖老师写了一个脚本来一次性生成证书。 其实脚本不长,流程也就是标准的生成证书的流程。但是自己生成如果不熟练弄错一点那就全拜拜(只能说明我笨,没别的)。 这个脚本只需要输入要配置ssl加密的域名以及输入四遍密码就可以了。
像我弄得是个内网服务器,192.168.XX.XX这种。为此头疼了好久,实在是没找到怎么给这种域名搞证书的文章。(再次证明我太蠢了哈哈)。 亲测这个脚本是可以给内网生成证书的。其实自己手动生成也可以,但是还是脚本跑的精确度高。
#!/bin/sh
# create self-signed server certificate:
read -p "Enter your domain [www.example.com]: " DOMAIN
echo "Create server key..."
openssl genrsa -des3 -out $DOMAIN.key 1024
echo "Create server certificate signing request..."
SUBJECT="/C=US/ST=Mars/L=iTranswarp/O=iTranswarp/OU=iTranswarp/CN=$DOMAIN"
openssl req -new -subj $SUBJECT -key $DOMAIN.key -out $DOMAIN.csr
echo "Remove password..."
mv $DOMAIN.key $DOMAIN.origin.key
openssl rsa -in $DOMAIN.origin.key -out $DOMAIN.key
echo "Sign SSL certificate..."
openssl x509 -req -days 3650 -in $DOMAIN.csr -signkey $DOMAIN.key -out $DOMAIN.crt
echo "TODO:"
echo "Copy $DOMAIN.crt to /etc/nginx/ssl/$DOMAIN.crt"
echo "Copy $DOMAIN.key to /etc/nginx/ssl/$DOMAIN.key"
echo "Add configuration in nginx:"
echo "server {"
echo " ..."
echo " listen 443 ssl;"
echo " ssl_certificate /etc/nginx/ssl/$DOMAIN.crt;"
echo " ssl_certificate_key /etc/nginx/ssl/$DOMAIN.key;"
echo "}"
这个脚本跑完以后,把生成的四个文件拷贝到XX/XX/nginx/ssl/下面去,ssl目录没有的话就自己建立一个。
接下来是我弄得nginx.conf配置。大家可以参考一下\
server
{
listen 443 ssl http2;
#listen [::]:443 ssl http2;
server_name 192.168.1.41;
index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/default;
ssl on;
ssl_certificate /usr/local/nginx/ssl/192.168.1.41.crt;
ssl_certificate_key /usr/local/nginx/ssl/192.168.1.41.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
ssl_session_cache builtin:1000 shared:SSL:10m;
# openssl dhparam -out /usr/local/nginx/ssl/192.168.1.41.pem 2048
#ssl_dhparam /usr/local/nginx/ssl/192.18.1.41.pem;
#error_page 404 /404.html;
# Deny access to PHP files in specific directory
#location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
include enable-php.conf;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
弄好之后到nginx的sbin目录下试一试 ./nginx -t 这个命令看看配置文件是不是正确。如果正确会显示
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost sbin]# ./nginx -s reload