PHP用OpenSSL扩展函数生成根证书和子证书

之前写了很多次,但是每次生成的客户端证书安装后不会出现在个人那,后来把ca.key改为了ca.pem,并且生成了一个client.p12,之后直接安装这个p12到个人即可

代码如下

<?php

	function ca(){
		$dn = array(   
			"countryName" => 'CN', //所在国家名称    
			"stateOrProvinceName" => 'BJ', //所在省份名称    
			"localityName" => 'BJ', //所在城市名称    
			"organizationName" => 'ca',   //注册人姓名    
			"organizationalUnitName" => 'shuai', //组织名称    
			"commonName" => 'ca', //公共名称    
			"emailAddress" => 'ca@a.com' //邮箱
		);
		//加密方式
		$config = array(
			"digest_alg"    => "sha256",
			"private_key_bits" => 2048,           //字节数  512 1024 2048  4096 等
			"private_key_type" => OPENSSL_KEYTYPE_RSA   //加密类型
		);
		
		$privkey = openssl_pkey_new($config);
		$csr = openssl_csr_new($dn, $privkey);
		
		$scert = openssl_csr_sign($csr, NULL, $privkey, 365 , $config);
		
		//导出证书和秘钥文件
		openssl_pkey_export_to_file($privkey,"./private/ca3.pem",NULL, $config);
		openssl_x509_export_to_file($scert,"./ca3.crt");
		openssl_csr_export_to_file($csr, "./ca3.csr");
		var_dump($scert);
		
	}
	//ca();
	//server();
	//client();
	function server(){
		$dn = array(   
			"countryName" => 'CN', //所在国家名称    
			"stateOrProvinceName" => 'BJ', //所在省份名称    
			"localityName" => 'BJ', //所在城市名称    
			"organizationName" => 'server',   //注册人姓名    
			"organizationalUnitName" => 'shuai', //组织名称    
			"commonName" => '(ip)或者啥都行', //公共名称    
			"emailAddress" => 'server@a.com' //邮箱
		);
		
		$config = array(
			"digest_alg"    => "sha256",
			"private_key_bits" => 2048,           //字节数  512 1024 2048  4096 等
			"private_key_type" => OPENSSL_KEYTYPE_RSA   //加密类型
		);
		
		$privkey = openssl_pkey_new($config);
		$csr = openssl_csr_new($dn, $privkey);
		
		$cacert = file_get_contents("./ca.crt");
		$private = array(file_get_contents("./private/ca.pem"),NULL);
		
		$scert = openssl_csr_sign($csr, $cacert, $private, 365);
		
		openssl_pkey_export_to_file($privkey,"./server.key",NULL);
		openssl_x509_export_to_file($scert,"./server.crt");
		openssl_csr_export_to_file($csr, "./server.csr");
		var_dump($scert);
			
	}
	
	function client(){
		$dn = array(   
			"countryName" => 'CN', //所在国家名称    
			"stateOrProvinceName" => 'BJ', //所在省份名称    
			"localityName" => 'BJ', //所在城市名称    
			"organizationName" => 'client',   //注册人姓名    
			"organizationalUnitName" => 'shuai', //组织名称    
			"commonName" => 'client', //公共名称    
			"emailAddress" => 'client@a.com' //邮箱
		);
		
		$config = array(
			"digest_alg"    => "sha256",
			"private_key_bits" => 2048,           //字节数  512 1024 2048  4096 等
			"private_key_type" => OPENSSL_KEYTYPE_RSA   //加密类型
		);
		
		$privkey = openssl_pkey_new($config);
		$csr = openssl_csr_new($dn, $privkey);
		
		$cacert = file_get_contents("./ca.crt");
		$private = array(file_get_contents("./private/ca.pem"),NULL);
		
		$scert = openssl_csr_sign($csr, $cacert, $private, 365);
		
		$pri = openssl_pkey_get_private($privkey);
		
		openssl_pkey_export_to_file($privkey,"./client.key",NULL);
		openssl_pkcs12_export_to_file($scert,"./client.p12",$pri,"111111");
		openssl_x509_export_to_file($scert,"./client.crt");
		openssl_csr_export_to_file($csr, "./client.csr");
		var_dump($scert);
			
	}
	
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用openssl.cnf文件来自定义Ca证书生成。下面是一个简单的例子: 1. 创建新的openssl.cnf文件 ``` cp /etc/ssl/openssl.cnf openssl.cnf ``` 2. 编辑openssl.cnf文件并添加以下部分: ``` [ca] default_ca = CA_default [CA_default] dir = /path/to/ca private_key = $dir/private/ca.key certificate = $dir/ca.crt new_certs_dir = $dir/newcerts database = $dir/index serial = $dir/serial crlnumber = $dir/crlnumber default_md = sha256 default_crl_days = 30 default_days = 365 policy = policy_anything [policy_anything] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional ``` 在此示例中,您需要将`/path/to/ca`替换为您的自定义路径。此外,您需要创建所需的目录并添加一个空文件index和一个空文件serial。 3. 生成私钥 ``` openssl genrsa -out /path/to/ca/private/ca.key 4096 ``` 这将生成一个4096位的RSA密钥,并将其保存在名为“ca.key”的文件中。 4. 生成自签名证书 ``` openssl req -x509 -new -nodes -key /path/to/ca/private/ca.key -config openssl.cnf -sha256 -days 1024 -out /path/to/ca/ca.crt ``` 在此命令中,-config参数指定使用的openssl.cnf文件,-key参数指定使用的私钥文件,-sha256参数指定使用SHA-256哈希算法,-out参数指定生成证书文件的名称。 现在,您已经生成了自定义的自签名证书,其中包含公钥和私钥。请注意,这是一个自签名的证书,在部署到生产环境之前,您需要获取由受信任的第三方机构颁发的证书
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值