自制证书搭建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
制作csr文件
openssl req -new -key server.key -out server.csr
用CA证书私钥对csr签名(CA不能用X509,这点需要注意)生成Server证书
openssl ca -days 3650 -in server.csr -cert ca.crt -keyfile ca.key -out server.crt

第二步,配置web服务器,nginx配置方法如下

server {
    listen 443;
    server_name www.mydomain.com;

    ssl on;
    ssl_certificate ssl/server.crt;
    ssl_certificate_key ssl/server.nosecret.key;

    location /t {
            echo "Hello World";
    }
}

第三步,验证方法如下

浏览器使用需导入ca.crt到根证书,curl和wget命令行工具使用方法如下
curl -v --cacert ca.crt "https://www.mydomain.com/t"
wget --ca-certificate=ca.crt https://www.mydomain.com/t

不检查证书
curl需要指定-k参数,wget需要带参数-no-check-certificate

附,libcurl使用如下

function curlPost($url, $data = array(), $timeout = 30, $CA = true){

    $cacert = getcwd() . ‘/ca.crt‘; //CA根证书
    $SSL = substr($url, 0, 8) == "https://" ? true : false;

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout-2);
    if ($SSL && $CA) {
        curl_setopt($ch, CURLOPT_SSLVERSION, 3);
        curl_setopt($ch, CURLOPT_SSLCERTTYPE, ‘PEM‘);//默认PEM
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);   // 只信任CA颁布的证书
        curl_setopt($ch, CURLOPT_SSLCERTPASSWD, true);   // 只信任CA颁布的证书  

        curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是CA颁布)
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配
    } else if ($SSL && !$CA) {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 检查证书中是否设置域名
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(‘Expect:‘)); //避免data数据过长问题
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    //curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); //data with URLEncode  

    $ret = curl_exec($ch);
    //var_dump(curl_error($ch));  //查看报错信息  

    curl_close($ch);
    return $ret;
}

$ret = curlPost("https://www.mydomain.com/t");
echo $ret;

?>

查看证书内容,有效期,用途方法如下

openssl x509 -in ca.crt -noout -text
openssl x509 -in ca.crt -noout -dates
openssl x509 -in ca.crt -noout -purpose
时间: 2024-12-12 11:52:44

自制证书搭建https服务的相关文章

如何实现基于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服务

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

实战:搭建CA认证中心,使用CA证书搭建HTTPS

CA认证中心服务端:xuegod63.cn                         IP:192.168.0.61客户端                  :xuegod64.cn                         IP:192.168.0.62CA:Certificate Authority的缩写,通常翻译成认证权威或者认证中心,主要用途是为用户发放数字证书.认证中心(CA)的功能有:证书发放.证书更新.证书撤销和证书验证.CA证书作用:身份认证--->数据的不可否认性

自建CA证书搭建https服务器

1.理论知识 https简介 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL. 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息.HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接

使用PHP SoapClient 处理自建证书的https服务

使用PHP的SoapClient处理认证过的https webservice是完全没有问题的.但是如果遇到一些不去认证https而是用自建的证书来做https的时候就会有问题,一般会报"Could not connect to host."错误. 解决方式之一就是试SoapClient忽略https的ssl认证,直接跳过认证的环节,直接贴代码吧 $context = stream_context_create( array (     'ssl' => array (      

Linux apache自建证书搭建https

前言 搭建https有两种方式,分为单向认证和双向认证.单向认证就是传输的数据加密过了,但是不会校验客户端的来源,也就只有客户端验证服务端证书. 单向认证 1.安装mod_ssl yum -y install mod_ssl 2.HTTP 服务器上配置mod_ssl 2.1.进入http服务器配置文件所在目录 cd /etc/pki/tls/certs/ 2.2.建立服务器密钥 [[email protected] certs]# make server.key           #建立服务器

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.首先要生成服务器的私钥:    运行时会提示输入密码,此密码用

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 配置 SSL 证书 + 搭建 HTTPS 网站教程

一.HTTPS 是什么? 根据维基百科的解释: 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器身份的鉴定.HTTPS连接经常被用于万维网上的交易支付和企业信息系统中敏感信息的传输.HTTPS不应与在RFC 2660中定义的安全超文本传输协议(S-HTTP)相混. HTTPS 目前已经是所有注重隐私和安全的网站的首选,随着技术的不断发展,HTTPS 网站已不再是