Nginx-with-GmSSLv3

所属分类:CA认证
开发工具:C
文件大小:1092KB
下载次数:1
上传日期:2023-04-05 12:59:38
上 传 者sh-1993
说明:  具有GmSSL的改进Nginx
(An modified Nginx with GmSSL)

文件列表:
Dockerfile (1743, 2023-04-05)
GmSSL (0, 2023-04-05)
LICENSE (1397, 2023-04-05)
auto (0, 2023-04-05)
auto\cc (0, 2023-04-05)
auto\cc\acc (201, 2023-04-05)
auto\cc\bcc (1275, 2023-04-05)
auto\cc\ccc (1324, 2023-04-05)
auto\cc\clang (1879, 2023-04-05)
auto\cc\conf (5269, 2023-04-05)
auto\cc\gcc (3586, 2023-04-05)
auto\cc\icc (2874, 2023-04-05)
auto\cc\msvc (3306, 2023-04-05)
auto\cc\name (1568, 2023-04-05)
auto\cc\owc (1862, 2023-04-05)
auto\cc\sunc (3516, 2023-04-05)
auto\configure (2590, 2023-04-05)
auto\define (141, 2023-04-05)
auto\endianness (889, 2023-04-05)
auto\feature (2812, 2023-04-05)
auto\have (136, 2023-04-05)
auto\have_headers (137, 2023-04-05)
auto\headers (411, 2023-04-05)
auto\include (1020, 2023-04-05)
auto\init (768, 2023-04-05)
auto\install (4875, 2023-04-05)
auto\lib (0, 2023-04-05)
auto\lib\conf (948, 2023-04-05)
auto\lib\geoip (0, 2023-04-05)
auto\lib\geoip\conf (1968, 2023-04-05)
auto\lib\gmssl (0, 2023-04-05)
... ...

# Nginx-with-GmSSLv3 [![CI](https://github.com/zhaoxiaomeng/Nginx-with-GmSSLv3/actions/workflows/CI.yml/badge.svg)](https://github.com/zhaoxiaomeng/Nginx-with-GmSSLv3/actions/workflows/CI.yml) [![Push To Dockerhub](https://github.com/zhaoxiaomeng/Nginx-with-GmSSLv3/actions/workflows/docker-image.yml/badge.svg)](https://github.com/zhaoxiaomeng/Nginx-with-GmSSLv3/actions/workflows/docker-image.yml) ## 介绍 GmSSL 3.0是GmSSL的一个大版本更新,采用了新设计的架构和API,因此无法像之前的版本兼容那些依赖OpenSSL API的应用。为了验证和证明GmSSL 3.0的可用性,有必要让GmSSL 3.0可以兼容最重要的应用类型,即HTTPS服务器。我们选择在Nginx上添加对GmSSL 3.0的支持。因此这个项目对于GmSSL 3.0有非常重要的作用。 本项目基于 Nginx 1.21.0修改。 ## 简单上手 本项目可通过Docker直接使用 doker启动的命令如下: ``` docker run -v $PATH_TO_CERTS:/certs -p 4443:443 -d zhaoxiaomeng/nginx_with_gmsslv3 ``` 注意, * Nginx-with-GmSSLv3默认使用的私钥名为signkey.pem 默认使用的证书名为certs.pem 如果没有证书和私钥的话,可以通过以下步骤生成: * [编译安装GmSSL3.0](#compile_gmssl) * 使用tools/reqsign_ext.sh脚本生成所需CA证书、私钥等,参见[这里](#certs) 。 ## 编译安装

### 下载Nginx-with-GmSSLv3源代码 ``` gmssl@ubuntu:~/nginx_doc$ git clone https://github.com/zhaoxiaomeng/Nginx-with-GmSSLv3.git ``` ### 编译安装Nginx-with-GmSSLv3 本项目依赖GmSSL3.0,请提前安装GMSSL3.0,或者通过--with-gmssl指定GmSSL源代码目录 #### 全局安装GmSSL3.0 建议使用本项目调试通过的GmSSL子模块版本: ``` gmssl@ubuntu:~/nginx_doc$ cd Nginx-with-GmSSLv3 gmssl@ubuntu:~/nginx_doc/Nginx-with-GmSSLv3$ git submodule init gmssl@ubuntu:~/nginx_doc/Nginx-with-GmSSLv3$ git submodule update gmssl@ubuntu:~/nginx_doc/Nginx-with-GmSSLv3$ cd GmSSL/ gmssl@ubuntu:~/nginx_doc/Nginx-with-GmSSLv3/GmSSL$ mkdir build gmssl@ubuntu:~/nginx_doc/Nginx-with-GmSSLv3/GmSSL$ cd build/ gmssl@ubuntu:~/nginx_doc/Nginx-with-GmSSLv3/GmSSL/build$ cmake .. gmssl@ubuntu:~/nginx_doc/Nginx-with-GmSSLv3/GmSSL/build$ make gmssl@ubuntu:~/nginx_doc/Nginx-with-GmSSLv3/GmSSL/build$ sudo make install ``` #### 使用--with-gmssl指定GmSSL3.0源代码目录 建议使用本项目的GmSSL子模块,编译安装的方法如下: ``` gmssl@ubuntu:~/nginx_doc$ cd Nginx-with-GmSSLv3 gmssl@ubuntu:~/nginx_doc/Nginx-with-GmSSLv3$ git submodule init gmssl@ubuntu:~/nginx_doc/Nginx-with-GmSSLv3$ git submodule update gmssl@ubuntu:~/nginx_doc/Nginx-with-GmSSLv3$ cp auto/configure . gmssl@ubuntu:~/nginx_doc/Nginx-with-GmSSLv3$ ./configure --with-http_ssl_module --without-http_upstream_zone_module --with-gmssl=./GmSSL/ --with-debug gmssl@ubuntu:~/nginx_doc/Nginx-with-GmSSLv3$ make gmssl@ubuntu:~/nginx_doc/Nginx-with-GmSSLv3$ sudo make install ``` Nginx会默认安装到`usr/local/nginx` 注意,编译过程中可能存在以下几个问题 1. 提示没有pcre ```sudo apt-get install libpcre3 libpcre3-dev``` 2. 提示没有gzip ``` sudo apt-get install zlib1g zlib1g-dev``` ### 配置与运行

#### 数字证书的生成与配置 为了使用国密ssl协议,需要使用GmSSL3.0生成国密数字证书,我们将相关证书生成程序放在了tools目录下,可以运行以下脚本生成证书和私钥 ``` gmssl@ubuntu:~/nginx_doc/Nginx-with-GmSSLv3$ cd tools/ gmssl@ubuntu:~/nginx_doc/Nginx-with-GmSSLv3/tools$ ./reqsign_ext.sh ``` 以上命令将会在tools目录下生成一系列文件,包括: * 根CA私钥 rootcakey.pem * 根CA证书 rootcacert.pem * CA私钥 cakey.pem * CA证书请求 careq.pem * CA证书 cacert.pem * 签名私钥 signkey.pem * 签名证书请求 signreq.pem * 签名证书 signcert.pem * 服务端证书 certs.pem * 客户端私钥 enckey.pem * 客户端书请求 encreq.pem * 客户端证书 enccert.pem #### Nginx配置文件修改 修改配置文件`/usr/local/nginx/conf/nginx.conf`,取消HTTPS Server的注释,并修改ssl_certificat和ssl_certificate_key为上一部分生成的签名证书和签名私钥,如下所示: ```bash server { listen 443 ssl; server_name localhost; ssl_certificate /home/gmssl/nginx_doc/Nginx-with-GmSSLv3/tools/certs.pem; ssl_certificate_key /home/gmssl/nginx_doc/Nginx-with-GmSSLv3/tools/signkey.pem; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } } ``` 在HTTPS server部分可以增加 `ssl_verify_client off;`来显式的避免客户端证书验证,如下所示: ```bash server { listen 443 ssl; server_name localhost; ssl_certificate /home/gmssl/nginx_doc/Nginx-with-GmSSLv3/tools/certs.pem; ssl_certificate_key /home/gmssl/nginx_doc/Nginx-with-GmSSLv3/tools/signkey.pem; ssl_verify_client off; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } } ``` #### 运行 Nginx-with-GmSSLv3 ```bash gmssl@ubuntu:~/nginx_doc/Nginx-with-GmSSLv3$ sudo /usr/local/nginx/sbin/nginx ``` 在执行以上命令时有可能报错,提示端口已经被占用了,因此需要修改`/usr/local/nginx/conf/nginx.conf`中的配置端口号。 #### 测试Nginx GmSSL3.0安装后有测试国密SSL协议的功能,在命令行中执行以下命令: ``` gmssl@ubuntu:~/nginx_doc/Nginx-with-GmSSLv3/tools$ gmssl tls13_client -host 127.0.0.1 -port 443 ``` 其中cacert.pem为上面生成的CA证书的位置。 如果命令执行成功,表明Nginx安装配置成功。 ### 调试与输出 #### 调试Nginx 为了让Ngnix更容易调试,在`/usr/local/nginx/conf/nginx.conf` 中增加 ``` daemon off; master_process off; ``` 这样nginx总是在前台以独立进程启动。否则nginx会启动多个进程,如果杀进程的时候没有先杀root进程,那么还会生成新的子进程。 #### 查看输出 虽然部分初始化阶段的stderr输出直接输出到屏幕上,但是随着Nginx彻底启动之后,错误信息被输出到Nginx的错误日志上了,也就是 ```bash /usr/local/nginx/logs/error.log ``` 有可能随着安装的不同而不同。在调试中可以通过error.log查看错误信息。

近期下载者

相关文件


收藏者