标签: pki

Windows上的X.509证书入门

我目前正在研究通过WSE 3.0或WCF加密和签名SOAP消息的主题.由于我没有参与涉及公共Internet的分布式应用程序开发,因此我发现我对X.509证书缺乏知识以及它在Windows证书存储机制中的工作原理.它不是关于非对称密码学; 它是关于PKI生态系统的.

因此,我想收集一些文章或书籍,这些文章或书籍对Windows的安全机制,如何正确使用和管理证书存储,CA信任链以及WSE或WCF等API如何交互并使用证书进行全面解释.建议?

wcf wse certificate pki x509

13
推荐指数
2
解决办法
2336
查看次数

RSA和素发生器算法

好吧,我对RSA数学运算的理解可能不会那么深,所以如果这是愚蠢的话,请随意拍我的头:

要生成私钥,我们需要两个随机的大素数.没有算法可以精确有效地做到这一点,但是有些算法可以生成大数字,这些数字具有99.99999 ...(数十亿9s)... 999%的概率.

我的问题是:如果通过一个惊人的运气,当你生成你的密钥时,素数生成算法产生了一个非素数会发生什么?这对于使用这个不幸的密钥的软件有何影响?

编辑:我知道其他因素更可能是这个问题的不良结果来源; 这只是纯粹的书呆子数学好奇心.

primes cryptography rsa pki

12
推荐指数
1
解决办法
5999
查看次数

Java X509证书解析和验证

我试图通过几个步骤处理X509证书并遇到几个问题.我是JCE的新手,所以我还没有完全了解所有内容.

我们希望能够根据不同的编码(PEM,DER和PCKS7)解析几个不同的X509证书.我使用FireFox(证书包括链)以PEM和PCKS7格式从https://belgium.be导出相同的证书.我已经离开了一些问题所不需要的线路

public List<X509Certificate> parse(FileInputStream fis) {  
    /*
     * Generate a X509 Certificate initialized with the data read from the inputstream. 
     * NOTE: Generation fails when using BufferedInputStream on PKCS7 certificates.
     */
    List<X509Certificate> certificates = null;
      log.debug("Parsing new certificate.");
      certificates = (List<X509Certificate>) cf.generateCertificates(fis);
    return certificates;
  }
Run Code Online (Sandbox Code Playgroud)

只要我使用FileInputStream而不是PCKS7的BufferedInputStream,这段代码工作正常,我觉得这很奇怪?但我可以忍受它.

下一步是验证这些证书链.1)检查所有证书是否都有有效日期(简单)2)使用OCSP验证证书链(如果证书中未找到OCSP URL,则回退到CRL).这是我不完全确定如何处理这个问题的地方.

我正在使用Sun JCE,但似乎没有那么多文档可用(在示例中)?

我首先做了一个简单的实现,只检查链而不经过OCSP/CRL检查.

private Boolean validateChain(List<X509Certificate> certificates) {
    PKIXParameters params;
    CertPath certPath;
    CertPathValidator certPathValidator;
    Boolean valid = Boolean.FALSE;

    params = new PKIXParameters(keyStore);
    params.setRevocationEnabled(false);

    certPath = cf.generateCertPath(certificates);
    certPathValidator = CertPathValidator.getInstance("PKIX"); …
Run Code Online (Sandbox Code Playgroud)

java validation jce pki x509certificate

12
推荐指数
1
解决办法
2万
查看次数

数字证书:加密和签名之间有什么区别

我对PKI,证书和所有相关的东西都比较新.

据我所知,在公钥加密中,用公钥加密并用私钥解密.只有一个私钥可以对应任何公钥,但反之则不然.这是对的吗?或者是一对一的映射?

因此,数字签名的工作方式是对证书的内容进行哈希处理,然后使用私钥"签名".然后使用相应的公钥验证签名.

所以,这是我感到困惑的地方.使用公钥加密邮件和使用私钥签名邮件摘要有什么区别?

pki digital-certificate digital-signature

12
推荐指数
3
解决办法
2万
查看次数

使用python访问具有PKI安全性的站点

我有一个启用了PKI安全性的站点.每个客户端使用读卡器加载其证书,或者证书安装在其盒子上的IE证书存储中.

所以我的问题是:

  1. 如何使用读卡器证书或系统上存储的证书来验证系统?
  2. 如何将凭据传递到网站上说,嘿,我是我,我可以访问该服务?他们的例子可以使用软证书.我可以稍后找出读卡器部分.

我一直在四处寻找,在这种情况下我没有想出任何帮助我的东西.Django有很多模块,但这不是一个选项,因为我只关心客户端的事情.我不是要创建一个托管服务的站点.我需要访问这些服务.

我有这个代码工作的类型.我只是不知道如何处理我得到的重定向:

import httplib
KEYFILE = r"C:\cert\my.key"
CERTFILE = r"c:\cert\my.pem"
HOSTNAME = 'machine.com'

conn = httplib.HTTPSConnection(
    HOSTNAME,
    key_file = KEYFILE,
    cert_file = CERTFILE
)

conn.putrequest('GET', '/arcgis/sharing/rest?f=json')
conn.endheaders()
response = conn.getresponse()
print response.read()
Run Code Online (Sandbox Code Playgroud)

所有这一切的结果是:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="https://machine.com/pki?https://machine.com/arcgis/sharing/rest%3f&amp;f=json">here</a>.</p>
</body></html>
Run Code Online (Sandbox Code Playgroud)

提供的任何帮助都会很棒!

软件规格:python 2.7.8,Windows 2012 R2

python ssl pki urllib2 python-2.7

12
推荐指数
1
解决办法
5572
查看次数

DOD通用访问卡(CAC)身份验证

我已经找到了在Apache中使用基于DOD CAC卡的客户端证书身份验证的所有必要步骤,但现在我正在努力从我收到的证书中为用户提供良好的GUID.证书上是否有可用的GUID,在更新CAC卡时不会更改?我正在考虑使用SSL_CLIENT_S_DN,它看起来像:

/ C = US/O =美国政府/ OU = DoD/OU = PKI/OU =承包商/ CN = LAST_NAME.FIRST_NAME.MIDDLE_NAME.0123456789

但是我听说CAC卡更新时最后的数字会发生变化.这是真的?是否有更好的信息用于GUID?我也想获取用户的电子邮件地址,但我在证书中收到的信息中看不到它.电子邮件地址是否在我看不到的某些自定义扩展程序中可用?

谢谢!

pki mod-ssl x509certificate2 cac

11
推荐指数
4
解决办法
2万
查看次数

Mac OS X上的JRE lib/security目录在哪里?

我需要生成一个证书,但找不到这个目录.谢谢!

java macos pki java-security

11
推荐指数
3
解决办法
2万
查看次数

在调用Web服务时信任过期的自签名证书

有一个受证书保护的Web服务.在调用它的客户端代码中,证书的CA必须存在于信任库(JRE_path\lib\security\cacerts)中 - 如果不存在,则在客户端获得PKIX异常.

如果证书已过期会发生什么 - 客户端代码失败.

但是,可以通过将证书直接添加到信任库来绕过这一点 - 信任过期的证书

即如果证书本身而不是CA存在于信任库中,那么即使证书已过期,一切都可以正常工作.

在我的场景中,webservice证书是一个自签名证书,所以我无论如何都必须将它添加到信任库,即使证书已过期,客户端也能继续正常工作.

现在我的问题是这将在所有场景中工作 - 我的程序只是一个运行本地JRE的命令行程序.

如果有一个应用程序调用webservice并且应用程序在Websphere,JBoss,WebLogic,Tomcat,Glassfish等上运行,并且自签名证书被添加到该环境的信任库中,我是否还可以认为它将继续工作(不是给出过期的错误)?

我认为它会起作用 - 因为那些应用程序服务器也会像任何程序一样使用JRE - 或者我错过了什么?

java web-services pki truststore appserver

11
推荐指数
1
解决办法
2982
查看次数

RSA私钥的PKCS#1和PKCS#8格式

有人可以帮助我理解RSA密钥是如何以这些格式存储的吗?我想知道PKCS格式与编码(DER,PEM)之间的区别.根据我的理解,PEM更具人性化.密钥/证书的PEM/DER类似于字符的UTF-8/16吗?DER/PEM有什么意义?对不起有太多问题,但厌倦了谷歌搜索和得到模糊的答案.谢谢.

cryptography rsa pki pkcs#8 pkcs#1

11
推荐指数
2
解决办法
2万
查看次数

Poco + OpenSSL + CA PEM:2个相同站点中的1个出现"不可接受的证书"错误

我正在尝试与SSL进行SSL握手www1.filemail.com.我正在使用cURL cacert.pem,但我收到此错误:

Unacceptable certificate from 188.138.81.30: application verification failure
Run Code Online (Sandbox Code Playgroud)

与任何其他HTTPS网站进行握手有效 - 包括www2.filemail.com.www1并且www2应该配置相同 - 并且它们在所有浏览器中都能正常工作.他们也在这里测试很好(两个站点都发送了相同的证书和中间证书):

为什么我www1使用OpenSSL和cacert.pem文件会遇到这个问题?

www1和www2的证书设置必须有所不同.我已经使用无数的工具(openssl,ssllabs等)进行了测试,试图找出差异 - 但我总是得到两个站点完全相同的结果(运行我的代码时除外)

我在这里错过了什么?这些网站有什么区别?

(应该注意的是,我们使用的是RapidSSL提供的相对便宜的通配符证书 - 所以我猜它与中间证书或跨根证书有关 - 但是当使用上面提到的工具进行测试时,一切似乎都是有序的.)


码:

Poco::SharedPtr<Poco::Net::InvalidCertificateHandler> pCert = new Poco::Net::ConsoleCertificateHandler(false);
Poco::Net::Context::Ptr pContext = new Poco::Net::Context(Poco::Net::Context::CLIENT_USE, "", "", "C:\\cacert.pem", Poco::Net::Context::VERIFY_RELAXED, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
Poco::Net::SSLManager::instance().initializeClient(0, pCert, pContext);

URI uri("https://www1.filemail.com");
Poco::Net::SecureStreamSocket ss(Poco::Net::SocketAddress(uri.getHost().c_str(), uri.getPort()));
ss.completeHandshake();
Run Code Online (Sandbox Code Playgroud)

c++ ssl openssl pki poco-libraries

10
推荐指数
1
解决办法
822
查看次数