我正在努力更好地解决公钥/私钥的工作方式.我知道发件人可以使用他/她的私钥向文档添加数字签名,以基本上获取文档的哈希值,但我不明白的是如何使用公钥来验证签名.
我的理解是公钥加密,私钥解密......任何人都可以帮我理解吗?
pki digital-signature public-key-encryption public-key private-key
以下命令生成一个包含公钥和私钥的文件:
openssl genrsa -des3 -out privkey.pem 2048
Run Code Online (Sandbox Code Playgroud)
来源:这里
使用OpenSSL,私钥也包含公钥信息,因此不需要单独生成公钥
我们如何从privkey.pem文件中提取公钥?
谢谢.
我在API的端点上有一个自签名证书.我正在尝试使用模拟器测试一些东西,但我得到"不受信任的服务器证书".
我试图在模拟器上使用safari下载.crt文件,但这似乎不起作用.
iPhone模拟器从哪里获得钥匙串?如何添加可信证书以使我的应用程序正常运行?
UPDATE
我通过创建CA然后使用iPhone配置工具添加CA证书来实现它.然后我能够在API服务器上获得由该CA证书签名的证书,并且NSConnection正常工作.由于某种原因,我无法使用自签名证书使其工作.我需要使用配置软件重新尝试此操作.
我真正的问题是如何让它在模拟器上运行?我认为模拟器使用实际计算机的钥匙串.
我们正在尝试使用C#和BouncyCastle库以编程方式生成X509证书(包括私钥).我们尝试使用Felix Kollmann的这个示例中的一些代码,但证书的私钥部分返回null.代码和单元测试如下:
using System;
using System.Collections;
using Org.BouncyCastle.Asn1;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.Crypto.Prng;
using Org.BouncyCastle.Math;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.X509;
namespace MyApp
{
public class CertificateGenerator
{
/// <summary>
///
/// </summary>
/// <remarks>Based on <see cref="http://www.fkollmann.de/v2/post/Creating-certificates-using-BouncyCastle.aspx"/></remarks>
/// <param name="subjectName"></param>
/// <returns></returns>
public static byte[] GenerateCertificate(string subjectName)
{
var kpgen = new RsaKeyPairGenerator();
kpgen.Init(new KeyGenerationParameters(new SecureRandom(new CryptoApiRandomGenerator()), 1024));
var kp = kpgen.GenerateKeyPair();
var gen = new X509V3CertificateGenerator();
var certName = new X509Name("CN=" + subjectName); …
Run Code Online (Sandbox Code Playgroud) 相关链接是这篇MSDN文章.
我总是对术语"主题"感到困惑,例如,sk选项"指定主题的密钥容器位置",sr选项"指定主题的证书存储位置".主题到底意味着什么?证书所有者?证书颁发者(例如颁发证书的根CA)?或者是其他东西?
由于SSL是安全互联网的支柱,(现在技术上称为TLS),我应该阅读哪些好书来理解它的各个方面?
我想我还需要学习一些数学,一些PKI书籍,加密书和Sysadmin书籍.由于这不是一个完整的清单,我有兴趣听听你认为明智的学习内容.
我正在设计一个系统,除了用户名/密码验证之外,用户还可以注册并随后使用客户端证书进行身份验证.
客户端证书必须是由配置的证书颁发机构列表颁发的有效证书,并在出现时进行检查(验证).
在注册阶段,我需要将客户端证书的一部分存储在用户存储库(DB,LDAP,等等)中,以便我可以将使用客户端证书进行身份验证的用户映射到内部"用户".
一个相当明显的选择是使用证书指纹; 但指纹本身是不够的,因为可能会发生冲突(即使它们不可能),因此我们需要存储证书中的其他信息.这个SO问题在这方面也提供了信息.
RFC 2459定义(4.1.2.2)证书序列号在给定CA中必须是唯一的.
综合所有这些,我正在考虑为每个注册用户存储证书序列号和证书颁发者.鉴于客户端证书将被验证并且有效,这应该唯一地标识每个客户端证书.这样,即使续订客户端证书,它仍然有效(序列号保持不变,发行者也是如此).
我错过了什么?
目前,只要客户端使用Web浏览器访问网站,我就成功实现了相互身份验证安全性,因为浏览器会为您处理所有证书交换.现在,我需要创建一个安全的界面,用户可以使用服务器所需的相互身份验证通过HTTPS访问Web服务.
首先,有没有人知道的资源可以帮助我吗?我已经找了很长时间没找到.任何其他人可以给我如何解决这个问题的提示?
其次,我认为我最大的障碍是我对如何处理证书缺乏了解.如何协商接受服务器密钥并将自己的密钥提供给服务器?这是Java.
需要SSLCertificateKeyFile的技术原因是什么(私钥)?那里使用的是什么?
我正在使用OpenSSL命令行工具生成自签名证书.除了两个问题外,它似乎正常工作.我无法用主题替代名称(关键)创建一个.cer并且我无法弄清楚如何创建一个版本3的证书(不确定这是否至关重要,但更愿意学习如何设置版本).
有人做过这个吗?默认配置(.cfg)文件看似清晰(见下文):
"这个东西是为subjectAltName和issuerAltname.导入电子邮件地址.subjectAltName = email:copy"
但这不起作用.我的预感是主题备用名称没有显示b/c它没有出现在V1规格中,这就是为什么我也在追求设置他的版本.
这是我正在使用的配置文件:
[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
emailAddress = myEmail@email.com
req_extensions = v3_req
x509_extensions = v3_ca
[req_distinguished_name]
C = [Press Enter to Continue]
C_default = US
C_min = 2
C_max = 2
O = [Press Enter to Continue]
O_default = default
0.OU=[Press Enter to Continue]
0.OU_default = default
1.OU=[Press Enter to Continue]
1.OU_default = PKI
2.OU=[Press Enter to Continue]
2.OU_default = ABCD
commonName = Public FQDN of server …
Run Code Online (Sandbox Code Playgroud) pki ×10
openssl ×3
x509 ×3
certificate ×2
security ×2
ssl ×2
apache ×1
bouncycastle ×1
c# ×1
iphone ×1
java ×1
keychain ×1
private-key ×1
public-key ×1
web-services ×1