首页 > 技术文章 > # Nginx 颁发自签证书

hi-eric 2022-05-23 13:22 原文

#1.Nginx 颁发自签证书

对于CentOS-7 的系统,默认 nginx 的SSL配置路径是 /etc/pki/nginx/
建议先进入这个目录,然后再执行下文的生成操作,最后把 nginx.key 移动到 private 目录中即可

首先,确保安装了OpenSSL库,并且安装Nginx时使用了 –with-http_ssl_module参数。

1.1:进入生成证书的目录

  cd  /etc/pki/nginx/

1.2:使用openssl创建创建服务器私钥,输入相应提示的信息

  openssl genrsa -des3 -out nginx.key 2048(nginx 是自己定义的,文件名而已)

输入密码后,再次重复输入确认密码。记住此密码,后面会用到

1.3:创建证书签名请求

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

1.4:清除以SSL启动Nginx时提示必须输入密钥

cp  nginx.key nginx.key.org
openssl rsa -in nginx.key.org -out nginx.key

1.5:使用刚生成的私钥和CSR进行证书签名

openssl x509 -req -days 3650 -in nginx.csr -signkey nginx.key -out nginx.crt

1.6:移动私钥到 private 目录(情况由 Nginx 配置文件中的 ssl_certificate_key 决定)

# cd  /etc/pki/nginx/
\cp -rf  nginx.key  private/

1.7: 在nginx 的 server{} 中加入以下配置(如果没有):

    listen       443 ssl http2 default_server;
    listen       [::]:443 ssl http2 default_server;

    ssl_certificate "/etc/pki/nginx/nginx.crt";
    ssl_certificate_key "/etc/pki/nginx/private/nginx.key";
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

#2. 常见问题处理

The plain HTTP request was sent to HTTPS port

Nginx监听4441端口使用https协议,浏览器输入http://hostname:4441时会报这样的错误。在使用 http 访问 https 时,就会报497错误
用error_page 处理一下即可:

server {
    listen       4441 ssl;
    ...
    ...
    error_page  497 https://$host:4441;
}

Blocked loading mixed active content


2、代码:

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

PS: 对于我司系统来说,只要在 fs_web/index.html 中的 header 中增加上述描述信息即可,见下图

推荐阅读