- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
大家好,所有 phpseclib 用户,我会开发一个系统来颁发证书,以便与 apache 建立相互认证系统。使用 openssl,所有步骤和设置都很容易遵循,我能够做到。但是,知道 phpseclib,我尝试用它做同样的事情,唯一的事情是我已经有一个 openssl ca 证书,这意味着我必须用它来签署一个由 phpseclib 颁发的新证书。似乎我能够做到,但是,当我尝试验证证书或在浏览器中导入时,过程是正确的并且证书 (pkcs12) 已导入,但看起来我没有有效的可用证书。怎么了 ?
这里是验证结果:
root@me:/# openssl verify -verbose -CAfile /var/CA/CA/ca.crt mario.rossi.crt
mario.rossi.crt: C = IT, ST = Lazio, O = MyOrg, OU = Users, CN = Mario ROSSI, emailAddress = mario.rossi@myorg.lan
error 7 at 0 depth lookup:certificate signature failure
3073886360:error:04091077:rsa routines:INT_RSA_VERIFY:wrong signature length:rsa_sign.c:175:
3073886360:error:0D0C5006:asn1 encoding routines:ASN1_item_verify:EVP lib:a_verify.c:221:
此处使用的代码(取自 tne 网络)
require_once("File/X509.php");
require_once("Crypt/RSA.php");
// Setup our CA
$CA = array(); // Store our certificate authority information
$CA["key" ] = new Crypt_RSA();
$CA["key" ]->loadKey( file_get_contents($cakey) ); // Load our CA key to sign with
$CA["key" ]->setPassword('---****---');
$CA["asciicert" ] = file_get_contents($cacert);
$CA["cert" ] = new File_X509();
$CA["cert" ]->loadX509( $CA["asciicert"] ); // Load our CA cert and public key
$CA["cert" ]->setPrivateKey($CA["key"]);
// Create a new keypair
$DEVICE = array();
$DEVICE["keys" ] = new Crypt_RSA();
$DEVICE["keypair" ] = $DEVICE["keys"]->createKey(2048);
// Save our private key
$DEVICE["privkey" ] = new Crypt_RSA();
$DEVICE["privkey" ]->loadKey($DEVICE["keypair"]["privatekey"]);
// Save our public key
$DEVICE["pubkey" ] = new Crypt_RSA();
$DEVICE["pubkey" ]->loadKey($DEVICE["keypair"]["publickey"]);
// Create a new CSR
$DEVICE["csr" ] = new File_X509();
$DEVICE["csr" ]->setPrivateKey($DEVICE["privkey"]);
$DEVICE["csr" ]->setPublicKey ($DEVICE["pubkey" ]);
$DEVICE["csr" ]->setDN("C=IT, ST=Emilia Romagna, O=Virtual Forensics Ambient, OU=Users, CN={$NAME}/emailAddress={$USERNAME}@{$DEVICENAME}");
// Sign the CSR
$DEVICE["signedcsr" ] = $DEVICE["csr"]->signCSR("sha256WithRSAEncryption");
$DEVICE["asciicsr" ] = $DEVICE["csr"]->saveCSR($DEVICE["signedcsr"]);
// CSR attributes
$DEVICE["cert" ] = new File_X509();
$DEVICE["cert" ]->loadCSR( $DEVICE["asciicsr"] ); // Now load it back up so we can set extended attributes
$DEVICE["cert" ]->setPublicKey ($DEVICE["pubkey" ]);
$DEVICE["cert" ]->setStartDate("-1 day"); // Make it valid from yesterday...
$DEVICE["cert" ]->setEndDate("+ 60 days"); // Set a 5 year expiration on all device certs
$DEVICE["cert" ]->setSerialNumber($ID, 10); // Use our ID number in the DB, base 10 (decimal) notation
$DEVICE["cert" ]->setExtension("id-ce-basicConstraints", array("cA" => false ), 1 );
$DEVICE["cert" ]->setExtension("id-ce-keyUsage" , array("keyEncipherment" ,"nonRepudiation" ,"digitalSignature" ), 1 );
$DEVICE["cert" ]->setExtension("id-ce-extKeyUsage" , array("id-kp-emailProtection" ,"id-kp-clientAuth" ), 1 );
$DEVICE["cert" ]->setExtension("netscape-cert-type" , array("Email" ,"SSLClient" ), 1 );
//CA sign the updated CSRc
$DEVICE["signedcert"] = $DEVICE["cert"]->sign($CA["cert"], $DEVICE["cert"], "sha256WithRSAEncryption"); // Sign the new certificate with our CA
$DEVICE["asciicert" ] = $DEVICE["cert"]->saveX509($DEVICE["signedcert"]); // Ascii our certificate for presentation
最佳答案
看起来您几乎是在改编 phpseclib user cert for tls authetication 中的示例
无论如何,一些快速的观察。
// Setup our CA
$CA = array(); // Store our certificate authority information
$CA["key" ] = new Crypt_RSA();
$CA["key" ]->loadKey( file_get_contents($cakey) ); // Load our CA key to sign with
$CA["key" ]->setPassword('---***---');
setPassword 应该在 loadKey 之前完成。
$DEVICE["cert" ]->setEndDate("+ 60 days"); // Set a 5 year expiration on all device certs
60 天和 5 年不一样 ;)
关于PHPSecLib 使用 openssl CA 证书不可验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28780373/
我不确定这是我做错了什么,还是服务器不支持 phpseclib 或什么,但我正在尝试连接到只接受安全 FTP 连接的 FTP 服务器,并且只接受某些 IP 地址。现在我知道 FTP 服务器接受来自我的
我想通过 php 添加 ssh 用户。所以我试试 phpseclib。不幸的是,该脚本不会返回任何用户创建的结果。然后我尝试做一个简单的命令 ls -la。仍然没有结果,只是加载了几秒钟并返回一个空白
我正在使用 Phpseclib 1.0 在远程服务器上执行多个命令。我知道如何将它配置为在出错时退出,但是有什么方法可以设置它在出错时停止并执行不同的命令吗?例如,我有 8 个命令要执行,当它全部工作
下载部分文件的最佳方法是什么(使用 phpseclib)。我有一个日志文件,其中不断附加数据。我想定期连接到远程服务器并下载最新的 block ,而不是每次都下载整个文件。 Rsync 是完美的,但并
我正在尝试使用它,但它只是给我这个错误,我不知道如何解决这个问题.. Warning: include_once(Math/BigInteger.php): failed to open stream
在我的一个项目中,我将使用 PHP 通过 SSH 远程连接许多服务器。有两种解决方案,phpseclib和 ssh2基于 libssh2 库的 PHP PECL 扩展。 那么谁能比较一下两者并谈谈它们
我在/home/pi/mydir 中有我想执行的脚本,所以我需要做的第一件事是 $ssh->exec('cd mydir'); 然后 $ssh->exec('./script'); 但它不起作用,所以
我已经在我的机器上安装了 Apache,因此我可以使用 localhost 作为 PHP 服务器。这样可行。现在我正在尝试使用 PHP 通过 SFTP 将文件发送到另一台服务器。我环顾四周,看到推荐使
我一直在寻找如何使用 php 的解决方案建立与远程服务器的连接并执行命令。研究使我注意到了两种解决方案; phpseclib和 ssh2 .我会尽量不让我的问题变成比较帖子。据我所知,它们都是广泛使用
我使用phpseclib建立SSH连接并执行代码。但是它有一个问题。 13秒超时。无论如何,我可以禁用此超时或将其延长吗?我需要在服务器上下载文件,该文件可能很大,因此需要13秒钟以上 最佳答案 尝试
当前正在尝试创建一个PHP Web应用程序以运行各种Shell脚本来处理网站生成和删除操作。 这是我的 deletePropertyProcess.php 的摘录: $ssh = new Net_SS
我正在尝试针对 HP C7000 Onboard Administrator 执行以下代码 include('Net/SSH2.php'); $ssh = new Net_SSH2('OA'); if
PhpSecLib 创建的默认证书文件将 keyUsage 设置为:All rules of applications。我如何将 keyUsage 设置为 Windows Crypto Shell 将
我正在尝试从 SFTP 服务器下载文件。我已经设法连接到它并下载了文件。问题是服务器中的文件会每天更新,并且文件名的一部分是它生成的确切时间,这是不可预测的。 我如何实现我的 PHP 脚本,以便它下载
我已经从 github 安装了 phpseclib 库,我正在尝试使用 PHP 加密密码(用于 Steam 社区)。我可以通过使用 Steam 在他们网站上的 javascript 代码来使用 Jav
我正在尝试在 Vagrant VM 中运行一个 PHP 文件,该 VM 也使用 Composer 进行构建。 我收到以下错误: PHP Warning: require(/var/www/CLIEN
我刚刚自己发现了 phpseclib,并想将它用于我的代码中。不知何故,我不知道如何将文件从一个 sftp 目录复制到另一个 sftp 目录。如果您能帮我解决这个问题,那就太好了。 例如: 复制所有文
我不明白这个错误: Your requirements could not be resolved to an installable set of packages. Problem 1 - don
我正在使用 phpseclib 库中的以下代码登录远程服务器(远程服务器使用:SFTP - SSH 文件传输协议(protocol)): login('username', 'password'))
我正在尝试使用 PHPSecLib 通过 PHP 中的 SFTP 连接到 SSH2 服务器。但我的问题是,服务器需要一个受密码保护的 key 文件,还需要用户名和密码。似乎只能提供用户名+密码或用户名
我是一名优秀的程序员,十分优秀!