以下命令生成一个包含公钥和私钥的文件:
openssl genrsa -des3 -out privkey.pem 2048
Run Code Online (Sandbox Code Playgroud)
来源:这里
使用OpenSSL,私钥也包含公钥信息,因此不需要单独生成公钥
我们如何从privkey.pem文件中提取公钥?
谢谢.
我正在使用以下组件构建自己的证书链:
Root Certificate - Intermediate Certificate - User Certificate
Root Cert是自签名证书,中间证书由Root和User by Intermediate签名.
现在我想验证用户证书是否具有根证书的锚点.
随着
openssl verify -verbose -CAfile RootCert.pem Intermediate.pem
确认就可以了.在下一步中,我验证用户证书,
openssl verify -verbose -CAfile Intermediate.pem UserCert.pem
验证在0深度查找时显示错误20:无法获得本地颁发者证书
怎么了?
尝试遵循有关创建自签名证书以与localhost一起使用的各种说明,大多数说明似乎适用于IIS,但我正在尝试使用Nodejs/Express.它们都没有正常工作,因为在安装证书时,它不受信任.这是我尝试过的失败:
有人可以提供可以做到这一点的工作流程吗? 我可以安装一个证书,但我无法让chrome(v32)或IE(v10)中的证书受到信任.
编辑:在评论中建议问题是没有受信任的cert-root.我通过IE安装了证书,但它仍然不受信任.
我正在尝试使用带有SubjectAltName的OpenSSL生成一个自签名证书.虽然我正在为证书生成csr,但我猜我必须使用OpenSSL x509的v3扩展.我在用 :
openssl req -new -x509 -v3 -key private.key -out certificate.pem -days 730
Run Code Online (Sandbox Code Playgroud)
有人可以用确切的语法帮助我吗?
我知道Let\'s Encrypt所做的更改可能会影响旧客户端,因为根证书会过期。请参阅DST 根 CA X3 到期(2021 年 9 月)。
\n但是,我认为这不会影响我,因为我的开发机器是最新的。
\n但从今天开始,我在执行以下操作时收到消息git pull:
fatal: unable to access \'https://git.company.tld/project.git/\': SSL certificate problem: certificate has expired\nRun Code Online (Sandbox Code Playgroud)\n我刚刚下载了最新的 Windows 版 Git (2.33.0),并确认内置的OpenSSL是最新的 ( OpenSSL 1.1.1k 25 Mar 2021),这应该很好。
Let\xe2\x80\x99s 加密证书的 OpenSSL 客户端兼容性更改
\n但错误似乎仍然存在。
\nopenssl s_client -showcerts -connect git.company.tld:443\nRun Code Online (Sandbox Code Playgroud)\n节目
\nopenssl s_client -showcerts -connect git.company.tld:443\nRun Code Online (Sandbox Code Playgroud)\n问题不在于颁发的证书本身,它没有过期并且被 Chrome(Windows证书存储)和 Firefox 接受。
\n我已经生成了一个私钥:
openssl genrsa [-out file] –des3
Run Code Online (Sandbox Code Playgroud)
在此之后,我生成了一个公钥:
openssl rsa –pubout -in private.key [-out file]
Run Code Online (Sandbox Code Playgroud)
我想用我的私钥签署一些消息,并使用我的公钥验证其他一些消息,使用如下代码:
public String sign(String message) throws SignatureException{
try {
Signature sign = Signature.getInstance("SHA1withRSA");
sign.initSign(privateKey);
sign.update(message.getBytes("UTF-8"));
return new String(Base64.encodeBase64(sign.sign()),"UTF-8");
} catch (Exception ex) {
throw new SignatureException(ex);
}
}
public boolean verify(String message, String signature) throws SignatureException{
try {
Signature sign = Signature.getInstance("SHA1withRSA");
sign.initVerify(publicKey);
sign.update(message.getBytes("UTF-8"));
return sign.verify(Base64.decodeBase64(signature.getBytes("UTF-8")));
} catch (Exception ex) {
throw new SignatureException(ex);
}
}
Run Code Online (Sandbox Code Playgroud)
我找到了将我的私钥转换为PKCS8格式并加载它的解决方案.它适用于这样的一些代码:
public PrivateKey getPrivateKey(String filename) throws Exception {
File f …Run Code Online (Sandbox Code Playgroud) 首先 - 如果我不给出密码,会发生什么?是否使用了某种伪随机短语?我只是在寻找"足够好"的东西来阻止随意的黑客入侵.
第二 - 如何从命令行生成密钥对,在命令行上提供密码?
我终于使用这些命令工作,使用exec()通常认为使用不安全,最好将PassPhrase放在文件中.我可以接受这种风险,因为我确信PHP只会在我的PC上执行(它运行Windows并且没有PS命令).
openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 2048
openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub
Run Code Online (Sandbox Code Playgroud)
很多人都要感谢@caf,没有他们,这是不可能的.
只有一个遗憾 - 无论我有多少谷歌,似乎没有人可以openssl_pkey_new()在Windows上使用Xampp(这是生成密钥对的正确方法)
我需要一个用于在Stunnel的CApath目录中发布的文件的哈希名称.我在这个目录中有一些证书,他们运作良好.我还有一个服务器sert和服务器密钥:
cert = c:\Program Files (x86)\stunnel\server_cert.pem
key = c:\Program> Files (x86)\stunnel\private\server_key.pem
Run Code Online (Sandbox Code Playgroud)
当我尝试计算新证书的哈希时,我收到一个错误:
/ etc/pki/tls/misc/c_hash cert.pem
无法加载证书140603809879880:错误:0906D06C:PEM例程:PEM_read_bio:无起始行:pem_lib.c:703:期望:TRUSTED CERTIFICATE
据我所知,我必须签署我的证书,但我不明白我该怎么做.请提供解决方案.
PS:
消息
无法加载证书140603809879880:错误:0906D06C:PEM例程:PEM_read_bio:无起始行:pem_lib.c:703:期望:TRUSTED CERTIFICATE:
当我为cert.pem制作c_hash时发布这不是server_cert.pem,这是Root_CA,它的内容类似于
----- BEGIN CERTIFICATE -----
... 6UXBNSDVg5rSx60 = ..
-----结束证书-----
当我写作
openssl x509 -noout -text -in cert.pem
在控制台面板中,我看到这个信息:
/etc/pki/tls/misc/c_hash cert.pem
unable to load certificate 140603809879880:error:0906D06C:PEM
routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
Run Code Online (Sandbox Code Playgroud)