使用openssl生成证书及密钥失败

$privateKey = openssl_pkey_new();
while($message = openssl_error_string()){
    echo $message.'<br />'.PHP_EOL;
}

调用后会有如下输出:

error:02001003:system library:fopen:No such process
error:2006D080:BIO routines:BIO_new_file:no such file
error:0E064002:configuration file routines:CONF_load:system lib
error:02001003:system library:fopen:No such process
error:2006D080:BIO routines:BIO_new_file:no such file
error:0E064002:configuration file routines:CONF_load:system lib
过程中,openssl_csr_new,openssl_csr_sign,openssl_pkey_new 这3个方法调用都会有上述错误输出


解决方案,为每个方法指定openssl.conf文件路径

修改后成功运行demo如下:

		$dn = array(
				"countryName" => 'XX', //所在国家名称
				"stateOrProvinceName" => 'State', //所在省份名称
				"localityName" => 'SomewhereCity', //所在城市名称
				"organizationName" => 'MySelf',   //注册人姓名
				"organizationalUnitName" => 'Whatever', //组织名称
				"commonName" => 'mySelf', //公共名称
				"emailAddress" => 'user@domain.com' //邮箱
		);
		 
		$privkeypass = '111111'; //私钥密码
		$numberofdays = 365;     //有效时长
		$cerpath = "./test.cer"; //生成证书路径
		$pfxpath = "./test.pfx"; //密钥文件路径
		 
		 
		//生成证书
		//$privkey = openssl_pkey_new();
		$opensslConfigPath = "E:/XAMPP/apache/bin/openssl.cnf";		//E:/XAMPP/php/extras/openssl/openssl.cnf	"E:/XAMPP/apache/conf/openssl.cnf"; 	//apache路径下的openssl.conf文件路径
		// E:/XAMPP/apache/bin/openssl.cnf
		
		var_dump(getenv('OPENSSL_CONF'));
		
		//	set OPENSSL_CONF="E:/XAMPP/php/extras/openssl/openssl.cnf"
		//	set OPENSSL_CONF="E:/XAMPP/apache/conf/openssl.cnf"
		//  set OPENSSL_CONF="E:/XAMPP/apache/bin/openssl.cnf"
		
		
		$config = array(
				'private_key_bits'  => 2048,
				'config'			=> $opensslConfigPath
		);
		$privkey = openssl_pkey_new($config);
		var_dump('1#openssl_pkey_new::::');var_dump ($privkey);
		
		
		
		
		
		$configargs = array('config'=>$opensslConfigPath);
		$csr = openssl_csr_new($dn, $privkey,$configargs);
		var_dump('2#openssl_csr_new::::');var_dump($csr);
		
		
		
		
		
		
		$sscert = openssl_csr_sign($csr, null, $privkey, $numberofdays, $configargs);
		var_dump('3#openssl_csr_sign::::');var_dump($sscert);
		
		
		openssl_x509_export($sscert, $csrkey); //导出证书$csrkey
		openssl_pkcs12_export($sscert, $privatekey, $privkey, $privkeypass); //导出密钥$privatekey
		//生成证书文件
		$fp = fopen($cerpath, "w");
		fwrite($fp, $csrkey);
		fclose($fp);
		//生成密钥文件
		$fp = fopen($pfxpath, "w");
		fwrite($fp, $privatekey);
		fclose($fp); 
		
		
		
		while (($e = openssl_error_string()) !== false) {
			echo $e . "\n<br/><br/>";
		}exit();


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值