Nginx + openssl 搭建https服务

近期忙着和第三方短信公司对接短信上行接口。给予https和digest认证方式进行数据的传输。digest认证由前端phper进行实现,我需要完成nginx+ssl实现https服务。ssl使用openssl自己进行制作。

SSL原理:

给予SSL原理知识,在这里不再过多阐述。想详细了解,可以猛戳此链接进行查看:http://www.fenesky.com/blog/2014/07/19/how-https-works.html

1.首先要生成服务器的私钥:

   运行时会提示输入密码,此密码用于加密key文件(参数des3便是指加密算法,当然也可以选用其他你认为安全的算法.),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果觉得不方便,也可以去除这个口令,但一定要采取其他的保护措施!
    去除key文件口令的命令:

执行这个命令之后,再启动nginx时,就无需输入密码。

2. 用server.key生成一个证书

       生成的csr 文件交给CA机构签名后,形成服务器自己的证书。按照提示,提供服务器证书的相关信息。

3. 对客户端也做同样的命令生成key及csr文件

4. 生成CSR证书文件必须有CA 机构的签名才可以形成证书。这里制作自己的CA生成一个key文件CA.key和一个根证书ca.crt

5. 创建openssl.conf 生成的配置文件

#根据openssl.cnf生成配置文件
touch /etc/pki/CA/{index.txt,serial}

#设置副本名称开始内容
echo 01 > /etc/pki/CA/serial

#设置副本证书存放目录
mkdir /etc/pki/CA/newcerts

6. 用CA的证书为刚才生成的server.csr 和 client.csr进行文件签名

客户端证书签发:

证书格式转换:

#IE浏览器需要p12证书,所以需要签发p12证书,用于IE签发:
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

#IOS 证书签发格式
openssl x509 -in client.crt -out client.cer

#Android 证书签发格式
openssl pkcs12 -export -in client.crt -inkey client.key -out  client.pfx

#pem格式证书
openssl pkcs12 -export -in ddmdd_a.pfx -out client.pem

删除私钥密码:

#删除私钥密码
openssl rsa -in client.key -out client_open.key

证书撤销:

echo 01 >  crlnumber
openssl ca -keyfile ca.key -cert ca.crt -revoke  client.crt  #从CA中撤销证书client.crt
openssl ca -gencrl -keyfile ca.key -cert ca.crt -out client.crl  #生成或更新撤销列表

查看证书信息:

openssl x509 -in client.pem -noout -text

client 浏览器需要使用的文件: ca.crt,client.crt,client.key,client.pfx

server 端使用的文件有:     ca.crt, server.crt,server.key

7.  配置Nginx SSL

server {
        listen          443 ssl;
        server_name     smsapi.chunbo.com;
        root            /var/www/smsapi.david.com;

        ssl on;
        ssl_certificate         /etc/nginx/conf.d/server.crt;
        ssl_certificate_key     /etc/nginx/conf.d/server.key;
        ssl_client_certificate  /etc/nginx/conf.d/ca.crt;

        ssl_verify_client       off;
        ssl_session_timeout     5m;
        ssl_protocols   SSLv2 SSLv3 TLSv1;
        ssl_ciphers     HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers   on;

        location / {
            index index.php index.html;
        }

        location ~ \.php$ {
            include         /etc/nginx/fastcgi_params;
            if (-f $request_filename) {
                fastcgi_pass   127.0.0.1:9000;
            }
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        }
}

#nginx 配置完成,reloadNginx服务

8.客户端导入证书

证书安装及使用把刚才生成的证书: 根证书ca.crt和客户端client.crt(client.pfx)安装到客户端,ca.crt 安装到信任的机构,client.crt直接在windows 安装或安装到个人证书位置。(如果是IE浏览器,需要安装client.pfx证书,在导入的时候需要输入证书签发的密码)

9. 测试

接下来就可以通过浏览器进行测试。有的时候可能会作为一个API接口提供其它程序进行调用,比如我使用python requests进行调用:

import requests

responseObj = requests.get(‘ cert=(‘/path/client.crt‘, ‘/path/client.key‘ ) )

data = responseObj.text

或:

responseObj = requests.get(‘  verify=‘/path/client.pem‘)
data = responseObj.text

如果是JAVA程序,需要P12格式证书。根据自己的需求进行选择。

给予Nginx+openssl 部署已经完成。

时间: 2024-08-02 11:00:35

Nginx + openssl 搭建https服务的相关文章

基于openssl搭建https服务

多种应用层协议,例如http,ftp,smtp等都是明文协议,而这些服务在互联网通信中是不可或缺的,而有时安全显得特别重要,例如网购的时候,所以出现了ssl/tls的技术,那么现在就来实现以下基于ssl搭建https服务 查看当前httpd服务器是否安装了mod_ssl模块 httpd -M 一般在使用rpm包安装的时候,不会安装该模块,在编译安装httpd的时候,在./configure --enable-ssl编译该模块 如果单独使用rpm安装mod_ssl,可以看到安装这个模块生成的文件

如何实现基于lamp搭建https服务

如何实现基于lamp搭建https服务 lamp:服务架构 httpd:接收用户的web请求:静态资源则直接响应:动态资源为php脚本,对此类资源的请求将交由php来运行: php:运行php程序: MariaDB:数据管理系统: (一):  安装其相关服务 CentOS 6: httpd, php, mysql-server, php-mysql # service httpd  start # service  mysqld  start CentOS 7: httpd, php, php-

基于openssl的https服务的配置

openssl实现私有CA,并配置基于openssl的https服务的配置,原理如下图 在CA服务器上实现私有CA步骤如下: 1.生成一对密钥 2.生成自签证书 基本的配置如下代码; [[email protected] CA]# pwd /etc/pki/CA [[email protected] CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048) [[email protected] CA]# openssl req -ne

Nginx反向代理https服务

背景: 最近因工作需要,需在web前端做一个代理,来解决部分用户不能访问的需求:之前通过nginx反向代理已实现对web的代理,但后来发现还有站点为https的,所以又找了些资料,整理了一下,测试完成. 方法: Nginx代理web站点ttxsgoto.com的相关部署和配置主要如下脚本实现: #!/bin/bash path_soft=$(pwd) function base(){ yum -y install  make gcc gcc-c++ autoconf } function ins

python3.x +django + nginx + uwsgi 搭建web服务

最近一直在用django开发自己的网站.在开发和线上环境的对接过程中遇到了许多的坑.所以想以一个老鸟的经历来写一下怎么 搭建web服务 一.python3.x .django .nginx .uwsgi 的介绍: 哈哈自己baidu吧 二.安装python3环境 ----

在NGINX上配置HTTPS服务

使用 NGINX 配置 HTTPS服务的步骤如下: 首先应该为你的域名申请一个ssl证书,如果是阿里云的服务器可以直接在阿里云的控制台中申请一个ssl安全证书. 在阿里云平台申请证书完成后,点击下载证书将证书下载到本地.然后用ftp工具传输到你自己的服务器上 listen 443 ssl 监听443号端口 server_name 你服务器的ip或者ip绑定的域名 ssl_certificate 服务器上xxx.pem文件的路径(最好填绝对路径) ssl_certificate_key 服务器上x

tomcat搭建https服务

1.生成服务器站点证书 1) 生成密钥仓库 进入jdk的bin目录,如:D:\jdk1.6.0_16\bin 执行: D:\jdk1.6.0_16\bin\keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\server.keystore -validity 36500 (参数简要说明:“D:\server.keystore”含义是将证书仓库文件的保存路径,证书仓库文件名称是server.keystore :“-validity 3

Nginx详解二十一:Nginx深度学习篇之配置苹果要求的openssl后台HTTPS服务

配置苹果要求的证书: 1.服务器所有的连接使用TLS1.2以上的版本(openssl 1.0.2) 2.HTTPS证书必须使用SHA256以上哈希算法签名 3.HTTPS证书必须使用RSA2048位或ECC256位以上公钥算法 4.使用前向加密技术 首先看openssl版本:openssl version,为1.0.1,需要升级 查看当前使用的自签算法类型:openssl x509 -noout -text -in ./jesonc.crt,使用的是sha1,位数是1024位,都不符合规定 升级

自制证书搭建https服务

第一步,自制CA证书和Server证书,私钥 自制CA私钥 openssl genrsa -des3 -out ca.key 4096 自制CA证书 openssl req -new -x509 -days 3650 -key ca.key -out ca.crt 自制Server私钥,生成免密码版本 openssl genrsa -des3 -out server.key 4096 openssl rsa -in server.key -out server.nosecret.key 制作cs