Articles of ssl certificate

SSL证书validation – 是否涉及任何caching?

案子: 几天前,我们的集成合作伙伴错过了更改SSL服务器证书的最后期限,证书的有效期至两天前。 发生这种情况时,我们的客户端软件开始抛出exception:“根据validation过程,远程证书无效”。 我们的客户端软件是用.NET 4编写的,并在Windows Server 2012上运行。SSL调用是通过WCF堆栈完成的。 昨天下午,我们的集成合作伙伴安装了一个新的有效的SSL证书。 现在的问题是,我们仍然在客户端上得到同样的exception:“根据validation过程,远程证书是无效的”。 我的问题: SSL证书validation状态是否以某种方式caching在客户端上? 我们的客户端软件是一个长期运行的过程,很less重新启动。 或者这是SSL协议的一些固有的部分? 我不是SSL或networking方面的专家,但是a)只有在SSL握手过程中,客户端才会检查服务器证书,以及b)在SSL握手中交换的信息可以用于多个networking请求同一台服务器 如果确实如此,那么它是如何定义SSL握手有效的? 更新 :我们重新启动客户端进程,然后它工作。 对我来说,这表明某个SSL服务器证书validation状态被caching在客户端上,每个进程。 我仍然非常想了解更多关于这个细节的信息:在什么级别的堆栈上发生这种情况? WCF? 。净? Windows API? 这个caching多久了? 有什么办法可以调整caching行为吗? 我可以手动清空caching吗? 这是logging在某处吗? 全堆栈跟踪: [E0]: The remote certificate is invalid according to the validation procedure. [T0]: System.Security.Authentication.AuthenticationException at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception) at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) […]

在EC2实例上设置SSL证书

我很难在我的EC2微型实例(如果我没有弄错的话,我使用基于CentOS的Amazon Linux AMI 2012.3)设置一个SSL证书(这是一个从NameCheap中获得的Comodo PositiveSSL)。 以下是我所做的: 我安装了mod_ssl&OpenSSL 我启用了我的EC2实例安全组上的端口443 Comodobuild议我将* .key&* .crt文件CHMOD到777 我确定IP地址和文件path是正确的(在示例中放了一串0,但在我的ssl.conf中是正确的) 我将这个VirtualHost条目添加到ssl.conf <VirtualHost 00.000.000.00:443> ############# I tried both with & without this section ############## ServerName www.mydomain.com:443 ServerAlias www.mydomain.com DocumentRoot /var/www ServerAdmin webmaster@mydomain.com ###################################################################### SSLEngine on SSLCertificateKeyFile /etc/ssl/mydomain_com.key SSLCertificateFile /etc/ssl/mydomain_com.crt SSLCertificateChainFile /etc/ssl/mydomain_com.ca-bundle </VirtualHost> 然后我重新启动Apache …但我仍然无法访问 https://www.mydomain.com/ ! 我说,与ssltool.com检查 The Common Name on the certificate is: […]

无法使用openssl获取私钥(no start line:pem_lib.c:703:Expecting:ANY PRIVATE KEY)

我有.key文件,当我这样做 openssl rsa -text -in file.key 我明白了 unable to load Private Key 140000419358368:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: ANY PRIVATE KEY 另外我有一个.cer文件,当我做 openssl x509 -text -in file.cer 我明白了 unable to load certificate 140387178489504:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE 但是,如果在这里指出我运行命令,如: openssl x509 -text -inform DER -in file.cer 我明白了 Certificate: Data: Version: 3 (0x2) Some more information … —–BEGIN […]

IIS6:从命令行创build/安装SSL自签名证书

我想在IIS6中自动为网站设置SSL。 它似乎selfSSL和certutil可以用来做到这一点,但证书对我来说是新的,我不确定如何把它们放在一起。 从我的理解我需要: 创build一个证书 将证书分配给网站 添加一个安全的(SSL / 443)绑定到网站 如果站点证书已经创build,我也想避免创build一个新的证书。 这样我不会得到一堆redudant证书。

使用C ++在Windows上获得SSL证书

我正试图获得Windows上的远程服务器的SSL证书。 我发现的一个select是使用openssl。 互联网上的一些post显示的命令是: openssl.exe s_client -showcerts -connect {REMOTE_SERVER_IP}:{REMOTE_SERVER_PORT} 这完美的工作,但我的问题是,上述命令超时300秒。 证书本身的打印速度非常快,当我在最初的几秒内获得所有我想要的时间时,我没有理由等待300秒。 仍然我认为没有办法改变s_client上的超时参数。 所以我试着想办法在一段时间后在窗户上杀死一个进程,但又没有运气。 任何想法如何做到这一点? 如果有一些其他窗口的方式来获得远程服务器SSL证书,并将其存储在一个文件中,这也将做这项工作。 编辑:根据布鲁诺的要求添加更多的信息。 我正在尝试创build一个获取远程服务器的SSL证书的c ++应用程序,并将其存储在文件中以供进一步处理。 由于我的应用程序已经使用openssl.exe,我需要一个使用openssl.exe或标准的Windows命令(即不需要任何额外的库)的解决scheme。 编辑2:我find了一种方法来避免在linux等待 – 只是创build一个空的文件,并redirect到它的openssl s_client的input(或使用pipe道传递空input)。 这在Windows上工作,但与旧版本的openssl(0.9.8l)。 我用0.9.8r和1.0.1b试了一下,把inputredirect到一个空文件没有帮助。

SSL证书预取.NET

我正在编写一个实用程序,可以让我监视我们网站的健康状况。 这包含一系列可以针对Web应用程序运行的validation任务。 其中一项testing是预测特定SSL证书的到期date。 我正在寻找一种方法来预先获取安装在网站上的使用.NET或WINAPI的SSL证书,以便我可以validation与特定网站相关联的证书的到期date。 我可以做到这一点的一个方法是caching证书,当它们在ServicePointManager.ServerCertificateValidationCallback处理程序中进行validation,然后将它们与configuration的网站进行匹配,但是这似乎有点冒失鬼。 另一种方法是使用网站的证书configuration应用程序,但是如果可以的话,我宁愿避免这种情况,以尽量减lessconfiguration。 使用.NET下载与网站相关的SSL证书最简单的方法是什么,这样我可以检查证书包含的信息来validation它? 编辑: 为了扩展下面的答案,在创build请求之前不需要手动创buildServicePoint。 它是在请求对象上生成的,作为执行请求的一部分。 private static string GetSSLExpiration(string url) { HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; using (WebResponse response = request.GetResponse()) { } if (request.ServicePoint.Certificate != null) { return request.ServicePoint.Certificate.GetExpirationDateString(); } else { return string.Empty; } }

将Windows PRIVATEKEYBLOB转换为Qt的QSslKey

我正在使用SSLencryption的Qt应用程序(Windows服务)。 我需要从Windows证书存储中访问证书和关联的私钥,并使用setLocalCertificate和setPrivateKey分别接受QSslCertificate和QSslKey将其传递给我的QSslSocket。 我能够从商店获取证书,并使用Windows API(CertOpenStore,CertFindCertificateInStore)将其设置为QsslSocket。 现在,我有证书,我需要提取其私钥,并设置为ssl套接字。 我正在使用CryptAcquireCertificatePrivateKey,CryptGetUserKey和CryptExportKey Windows API以相同的顺序,这给了我一个Microsoft PRIVATEKEYBLOB,现在我需要将其转换为QSslKey理解的格式。 我怎么做?

从Windows证书存储导出PFX文件

我们的应用程序使用OpenSSL来保护客户端设备和服务器之间的通信。 证书由客户CA生成,我们必须将服务器证书和私钥上传到基于Windows操作系统的计算机。 到目前为止,我们指导客户在服务器文件系统的特定目录中保存包含服务器证书和私钥的PEM文件,然后从那里上传应用程序。 最近,我们被客户要求从本地Windows证书商店读取PFX证书。 我可以想到两个选项,它们结合使用CAPI库来导出WCS(根据友好名称)的PFX文件,将其序列化,然后使用OpenSSL API上传。 第一个选项将其保存为服务器文件系统上的临时文件,然后像以前一样使用OpenSSL API读取。 第二个选项使用内存,即通过指针,而不是使用临时文件。 我的团队花了很多时间在网上search(主要是堆栈溢出)并尝试代码片段,但没有find工作的解决scheme。 我明白在将文件导入WCS时,私钥应该是可导出的。 当我尝试下面的代码简单导出证书并将其保存到文件(基于MS示例代码的选项#1的前半部分)时,它只写入一个字符到文件。 我在这里错过什么? 我需要重新格式化证书吗? 任何错误的想法,什么是正确的方法来做到这一点? 私钥可以用这种方式提取吗? 预先感谢您的任何评论 //—————————————– #pragma comment(lib, "crypt32.lib") #include <stdio.h> #include <windows.h> #include <Wincrypt.h> #define MY_ENCODING_TYPE (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING) void MyHandleError(char *s); void main(void) { //——————————————————————- // Declare and initialize variables. HCERTSTORE hSystemStore; PCCERT_CONTEXT pCertContext = NULL; Char pszStoreName[256] = "root"; char […]