生成证书的脚本:
#!/bin/bash openssl genrsa -des3 -passout pass:123456 -out ssl.key 2048 mv ssl.key xxx.key openssl rsa -in xxx.key -passin pass:123456 -out ssl.key rm xxx.key openssl req -new -key ssl.key -out ssl.csr -subj "/CN=RootCA/C=CN/ST=Hunan/L=ChangSha/O=MyCompanName/OU=IT" openssl x509 -req -days 3650 -in ssl.csr -signkey ssl.key -out ssl.crt
# 生成 pfx格式的文件
# openssl pkcs12 -export -in ssl.crt -inkey ssl.key -passin pass:123456 -out client.pfx ### rename the file NOW_DATE=`date "+%Y%m%d%H%M%S"` if [ x$1 != x ]; then #Have args NEW_FILE_NAME=$1 else #Not have args NEW_FILE_NAME=$NOW_DATE fi echo $NEW_FILE_NAME mv ssl.crt $NEW_FILE_NAME.crt mv ssl.csr $NEW_FILE_NAME.csr mv ssl.key $NEW_FILE_NAME.key
Nginx配置
server { listen 443; server_name 192.168.56.99 192.168.1.159 morse.5699.com; index index.html index.htm index.php; root /data/project/morseapp-api/public; # 索引目录 autoindex on; autoindex_exact_size off; autoindex_localtime on; # SSL 配置 ssl on; ssl_certificate ../key/20190301111730.crt; ssl_certificate_key ../key/20190301111730.key; location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=/$1 last; break; } } location ~ .*\.(php|php5)?$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; set $document_base_dir "/data/project/morseapp-api"; fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_base_dir:/tmp/:/var/tmp/:/proc/"; fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi.conf; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { #add_header Cache-Control no-store; expires 30d; } location ~ .*\.(js|css)?$ { expires 1h; } location = /favicon.ico { access_log off; log_not_found off; } }
在新版本中【尝试在 1.18中】
ssl on ;
命令已经废弃,根据提示使用如下替换:
nginx: [warn] the "ssl" directive is deprecated, use the "listen … ssl" directive instead in /data/nginx/conf/nginx.conf:101
提示,以下两个指定SSL证书位置的路径,
如果是相对路径,则默认是 从conf 目录下面开始搜索
ssl_certificate
ssl_certificate_key
路径出错,会有如下提示:
nginx: [emerg] cannot load certificate key "/data/nginx/conf/conf/ssl/sz-yd.code.cn.key": BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/data/nginx/conf/conf/ssl/sz-yd.code.cn.key','r') error:2006D080:BIOroutines:BIO_new_file:no such file)
默认使用的 .pem 与 .key 文件的组合
也可以使用 .crt 与 .key 文件的组合,如下所示
# ssl_certificate cert.pem;
ssl_certificate ssl/sz-yd.code.cn.crt;
ssl_certificate_key ssl/sz-yd.code.cn.key;