nginx 配置 ssl http2.0

本文详细介绍HTTPS证书的生成步骤及配置方法,并演示如何通过Nginx和Tomcat部署HTTPS及HTTP2.0,实现安全的数据传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http2.0 介绍参考知乎:https://www.zhihu.com/question/34074946

编译nginx:

在开始我们的任务之前,请先下载 OpenSSL,pcre,Zlib 跟 Nginx源码 ,并且全部解压到同一个目录,假设为 nginx,这时候的代码结构如下:

nginx-1.9.14
openssl-1.0.2g
pcre-8.38
zlib-1.2.11
进入nginx源码目录

cd nginx-1.9.14/
编译:

./configure --prefix=/usr/local/nginx --with-http_v2_module --with-http_ssl_module --with-pcre=../pcre-8.38 --with-openssl=../openssl-1.0.2g --with-zlib=../zlib-1.2.11
安装:

make && make install
开启https:

------------------------------------------------------------

HTTPS证书验证流程(极简化版)
    1.客户端向服务端请求证书(server.crt)
    2.服务端下发证书(server.crt)
    3.客户端用预制的受信任机构的证书(ca.crt)来验证服务端下发的证书(server.crt)是否合法,并且还会校验下发下来的证书里的域名与要请求的域名是否一致
    【以下步骤开启双向验证后才会触发】
    4. 客户端选择一个由受信任的机构(ca.crt)颁发的证书(client.crt)发送给服务端
    5.服务端用预制的受信任机构的证书(ca.crt)来验证客户端传来的证书(client.crt)是否合法

-----------------------------------------------------------------

以下是证书生成步骤及说明:

------------------------CA证书-------------------------------

1. 创建根证书密钥文件(自己做CA)ca.key:
    openssl genrsa -des3 -out ca.key 2048
    #去除密码
    openssl rsa -in ca.key -out ca.key

2. 创建根证书的申请文件ca.csr:
    openssl req -new -key ca.key -out ca.csr

3. 创建一个自当前日期起为期十年的根证书ca.crt【用来签名其它证书,并配置在客户端信任列表,如果开启双向验证,也需要配置在服务端】:
    openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey ca.key -in ca.csr -out ca.crt

------------------------Server端要下发的证书---------------------------------
4. 创建服务器证书密钥server.key:
    openssl genrsa -des3 -out server.key 2048
    #去除密码
    openssl rsa -in server.key -out server.key

5. 创建服务器证书的申请文件server.csr:
    openssl req -new -key server.key -out server.csr

6. 创建自当前日期起有效期为期两年的服务器证书server.crt【配置在服务端,将会在客户端请求时下发给客户端】:
    openssl x509 -req -days 730 -sha1 -extensions v3_req -CA ca.crt -CAkey ca.key -CAserial ca.srl -CAcreateserial -in server.csr -out server.crt


------------------------Client端要下发的证书【开启双向验证后才需要】---------------------------------
7. 创建客户端证书密钥文件client.key:
    openssl genrsa -des3 -out client.key 2048
    #去除密码
    openssl rsa -in client.key -out client.key

8. 创建客户端证书的申请文件client.csr:
    openssl req -new -key client.key -out client.csr

9. 创建一个自当前日期起有效期为两年的客户端证书client.crt【配置在客户端】:
    openssl x509 -req -days 730 -sha1 -extensions v3_req -CA ca.crt -CAkey ca.key -CAserial ca.srl -CAcreateserial -in client.csr -out client.crt

------------------------各种格式转换---------------------------------

a. crt+key转pfx【pfx是证书安装包,方便在电脑上直接双击按向导安装证书】
    openssl pkcs12 -export -in client.crt -inkey client.key -out client.pfx

b. pfx转化为pem【curl需要pem格式文件】
    openssl pkcs12 -in client.pfx -nodes -out client.pem

c. crt+key转p12【apache的cxf客户端支持jks和p12证书】
    openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

d. crt转jks【jks支持存放信任证书,而pkcs12不支持,所以tomcat环境下配置ca只能使用jks才能保证ca密钥不泄露】
    keytool -import -v -trustcacerts -storepass defaultpwd -keypass defaultpwd -file ca.crt -keystore ca_only.jks

---------------------------------------------------------
关于创建证书的申请文件(.csr)时的输入内容
    Country Name (2 letter code) [AU]:CN【国家代号,中国输入CN】
    State or Province Name (full name) [Some-State]:BeiJing【省的全名,拼音】
    Locality Name (eg, city) []:BeiJing【市的全名,拼音】
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany Corp.【公司英文名】
    Organizational Unit Name (eg, section) []: 【可以不输入】
    Common Name (eg, YOUR name) []:【对于server.csr需要输入网站的域名以作校验,其余的csr可随意填写】
    Email Address []:admin@mycompany.com【电子邮箱,可随意填】

    Please enter the following ‘extra’ attributes
    to be sent with your certificate request
    A challenge password []:【可以不输入】
    An optional company name []:【可以不输入】


-----------------------nginx开启https配置--------------------------

[plain]  view plain  copy
  1. server {  
  2.     #上线请将端口改为默认443  
  3.     listen       8443 ssl http2;  
  4.     server_name  your_domain;  
  5.     index  index.html index.htm;  
  6.   
  7.     ssl                  on;  
  8.     ssl_certificate      /your/certs/path/server.crt;  
  9.     ssl_certificate_key  /your/certs/path/server.key;  
  10.       
  11.     #以下两行注释用来开启双向验证  
  12.     #ssl_client_certificate /your/certs/path/ca.crt;  
  13.     #ssl_verify_client on;  
  14.   
  15.     ssl_session_timeout  5m;  
  16.       
  17.     location /your_https_path/ {  
  18.         proxy_pass_header Server;  
  19.         proxy_set_header Host $http_host;  
  20.         proxy_set_header X-Real-IP $remote_addr;  
  21.         proxy_set_header X-Scheme $scheme;  
  22.         proxy_pass http://your_http_host:port/your_http_path/;  
  23.     }  
  24.   
  25. }  

-------------------------tomcat开启https配置【clientAuth用来开启双向验证】-----------------------------------

[html]  view plain  copy
  1. <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"  
  2.                maxThreads="150" SSLEnabled="true" scheme="https" secure="true"  
  3.                clientAuth="true" sslProtocol="TLS"  
  4.                keystoreType="PKCS12"  
  5.                keystoreFile="c:/server/certs/path/server.p12" keystorePass="defaultpwd"  
  6.                truststoreType="JKS"  
  7.                truststoreFile="c:/ca/certs/path/ca_only.jks" truststorePass="defaultpwd" />  


启动nginx

/usr/local/nginx/sbin/nginx

浏览器访问结果如下:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值