什么时候会使用--cacert
选项与(CLI)中的--capath
选项curl
.
--cacert
似乎引用包含多个PEM的单片文件.假设它扫描一下,找到匹配的主机名?
--capath
似乎引用了多个文件所在的目录.卷曲是否将相应的证书作为文件名取出?
我正在尝试将文件上传到受SSL保护的Web服务,并且需要客户端证书(由内部CA签名).与上传文件相比,与Web服务的通信运行良好(下载文件,查询,运行命令和执行各种POST工作正常).
上传文件时,我得到一个SSLException(javax.net.ssl.SSLException),上面写着"写入错误:ssl = 0x5fe209c0:系统调用期间的I/O错误,同级连接重置".
我创建了一个重复的服务器并删除了SSL和客户端证书要求,并试图通过'vanilla'HTTP上传,并且它运行良好.
我尝试过使用setFixedLengthStreamingMode(int)和setChunkedStreamingMode(int)但没有成功.使用它们时,会从该write
方法抛出异常,并且在不使用它们时,会从调用中抛出相同的异常getResponseCode()
.
我找不到有关服务器中的错误的任何信息EventVwr
.
我们的其他客户端(iOS客户端)能够在那里上传文件,因此它必须是我所做的 - 但我无法弄清楚是什么.
我不确定如何进一步调试此问题.
请帮忙.
我们做了很多调试工作,发现:
在你的评论中读到之后,现在我让Fiddler玩得很好(感谢这个问题).Fiddler得到了这个文件,但没有成功发送它.请求(原始)看起来像:
POST https://192.168.2.2/rest/transfer/strong/Upload/Full?Path=%5C20140807_113255_20.jpg&Root=2 HTTP/1.1
SessionToken: 1234 // We use this for session management
FileMetadata: {"FileSize":"1315496","FileName":"GrumpyCat.jpg"}
Connection: Keep-Alive
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.1.1; GT-N7100 Build/JRO03C)
Host: 192.168.2.2
Accept-Encoding: gzip
Content-Type: application/x-www-form-urlencoded
Content-Length: 1315496
;odiao;awriorijgoeijoeirj;oedfrvgerg... // The image
Run Code Online (Sandbox Code Playgroud)
Fiddler的回应(也是RAW)是:
HTTP/1.1 504 Fiddler - Send Failure
Date: Wed, 20 Aug 2014 …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个Java应用程序,它连接到https://ut.eurodw.eu/(欧洲Datawarehouse的测试环境)中公开的SOAP服务.我正在开发我的开发机器,最近用Windows 8.1重新格式化了.今天,我尝试通过SOAP从我的程序向他们发送创建请求,并收到此错误:
Caused by: javax.xml.ws.WebServiceException: Could not send Message.
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:146)
at com.sun.proxy.$Proxy110.createDeal(Unknown Source)
at it.csttech.edwin.services.spring.EdwinServiceImpl.createDeal(EdwinServiceImpl.java:102)
at it.csttech.edwin.consumercredit.data.managers.spring.DealManagerImpl.createEdCode(DealManagerImpl.java:319)
... 77 more
Caused by: javax.net.ssl.SSLHandshakeException: SSLHandshakeException invoking https://ut.eurodw.eu/edservices/2.2/DealService.svc: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1339)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1323)
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:628)
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:565)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:474)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:377)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:330)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:135)
... 80 more …
Run Code Online (Sandbox Code Playgroud) 我有一个使用自签名证书运行的烧瓶应用程序.我可以使用以下命令发送卷曲请求:
curl -v -k -H "Content-Type: application/json" -d '{"data":"value1","key":"value2"}' https://<server_ip>:<port>
Run Code Online (Sandbox Code Playgroud)
详细的日志显示一切顺利.
我想避免使用-k(--insecure)选项,而是指定curl可以使用的.pem文件.看一下curl手册页,我发现你可以使用--cert选项来做到这一点.所以我用这个创建了一个.pem文件:
openssl rsa -in server.key -text > private.pem
Run Code Online (Sandbox Code Playgroud)
使用private.pem文件时CURL会抛出此错误:
curl: (58) unable to use client certificate (no key found or wrong pass phrase?)
Run Code Online (Sandbox Code Playgroud)
有什么建议? - 或者这是否只有正确签署的证书?
TNX
我有一个.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
Run Code Online (Sandbox Code Playgroud)
我也有一个.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
Run Code Online (Sandbox Code Playgroud)
但如果在这里指出我运行命令,如:
openssl x509 -text -inform DER -in file.cer
我明白了
Certificate:
Data:
Version: 3 (0x2)
Some more information
...
-----BEGIN CERTIFICATE-----
MIIEdDCCA1ygAwIBAgIUMjAwMDEwMDAwMDAxMDAwMDU4NjcwDQYJKoZIhvcNAQEF
...
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
但这似乎与关键不起作用,因为当我跑
openssl rsa -text -inform DER -in aaa010101aaa__csd_10.key
我明白了
unable to load Private Key
140004844304032:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1337: …
Run Code Online (Sandbox Code Playgroud) 我试图在SSL模式设置为true的情况下运行ASP MVC应用程序,每当我运行应用程序时,我都会立即信任IIS Express SSL证书.单击是后,它会显示错误消息'将证书添加到受信任的根证书存储失败,并显示以下错误.访问被拒绝'.我以管理员模式运行Visual Studio 2017.我还通过访问MMC删除了localhost证书.有没有其他人遇到过这个问题.
SOLN:这对我有用.删除所有localhost证书.在添加/删除程序中运行修复IIS Express.将localhost证书从个人/证书复制并粘贴到受信任的根证书,它不再抱怨.
将信任分散一点是很好的,所以我们不必在任何实例中只依赖一个根.
是否可以拥有一个由多个CA签名的证书?
我正在尝试在IIS7上运行的Web应用程序上设置双向身份验证.客户端主要是移动设备,首先我试图使用第三代iPad运行演示.我以为我首先要让它在我的工作站上运行(也运行IIS),然后通过iPad复制工作证书.
但是我撞墙了.
我已经让网站通过https安全运行并安装了自签名服务器证书,但我似乎无法弄清楚如何生成我可以在iPad上安装的客户端证书.当我在运行Windows 7的本地工作站上工作时,我无法使用通常的方法http://machinename/CertSvr
来执行此操作.
所以我想知道是否有办法makecert
生成测试客户端证书,或者我是否可以更改服务器证书中的使用标志,使其适合在客户端上使用.或者也许还有一些工具,谷歌的最后一天还没有发现?
更新:
我找到了这个指南并跟着它来了.这一切似乎工作,没有错误,我结束了两个PFX文件,一个用于服务器和一个客户端(我产生这些使用pvk2pfx
,并保持原有的.pvk
和.cer
以防万一的文件).
我安装了服务器证书Certificates (Local Computer) > Trusted Root Certification Authority
并在其下安装了客户端证书Certificates (Current User) > Personal
.我还将服务器证书(CA一个)导入IIS.当IIS配置为接受或忽略客户端证书时,一切正常.但是一旦设置为'Require',我在申请该网站时会得到403.7.我也尝试将客户端证书导入到IE/Chrome中的证书存储区,但同样没有骰子.
有什么明显的东西我做错了吗?
使用C#,.Net 4.5,我试图通过远程服务器上的HttpWebRequest发送Web请求.请参阅下面的代码.我尝试了一些论坛建议的大多数解决方案,但我总是遇到同样的错误.请参阅下面的堆栈跟踪.调用request.GetReponse()方法时抛出错误.
其他信息,基本上,我正在尝试调用安装在远程服务器上的vmware的vCenter组件的reloadSslCertificate功能.目前,该错误仅发生在vCenter 5.5上.它在5.1及以下版本中工作正常.
var uri = String.Format("https://{0}/some_url", serverName);
var request = (HttpWebRequest)WebRequest.Create(uri);
request.KeepAlive = true;
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.Headers.Set(HttpRequestHeader.AcceptLanguage, "en-US,en;q=0.8");
request.Credentials = credential;
request.CookieContainer = cookieContainer;
var response = request.GetResponse();
Run Code Online (Sandbox Code Playgroud)
异常:System.Net.WebException:基础连接已关闭:发送时发生意外错误.---> System.IO.IOException:身份验证失败,因为远程方已关闭传输流.System.Net.Security.SslState的System.Net.Security.SslState.StartReadFrame(Byte []缓冲区,Int32 readBytes,AsyncProtocolRequest asyncRequest)处于System.Net.Security.SslState的System.Net.Security.SslState.StartReceiveBlob(Byte []缓冲区,AsyncProtocolRequest asyncRequest). System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst,Byte [] buffer,AsyncProtocolRequest)上的System.Net.Security.SslState.StartSendBlob(Byte []传入,Int32计数,AsyncProtocolRequest asyncRequest)中的CheckCompletionBeforeNextReceive(ProtocolToken消息,AsyncProtocolRequest asyncRequest) System.Net.Security.SslState上的asyncRequest).
提前致谢.
在过去,基础R download.file()
无法使用HTTPS协议,因此必须使用RCurl.自R 3.3.0起:
所有版本都支持https:URL,默认方法是download.file(),url()和使用它们的代码.遗憾的是,无法保证可以访问任何特定的https:URL....不同的访问方法可能允许不同的协议或使用私有证书包...
的download.file()
帮助下仍然说道:
提供的包"RCurl"提供了更全面的URL下载工具.
其中(顺便提一下包括cookie和标题管理).
基于RCurl常见问题解答(查找"当我尝试通过https与URL进行交互时,我收到错误"),可以通过以下方式管理HTTPS URL:
getURL(url, cainfo="CA bundle")
Run Code Online (Sandbox Code Playgroud)
其中CA bundle
是证书颁发机构捆绑文件的路径.一个这样的捆绑可以从卷曲网站本身获得:https:
//curl.haxx.se/ca/cacert.pem
测试基于Windows平台
对于许多HTTPS网站的 download.file()
工作原理如下:
download.file(url="https://www.google.com", destfile="google.html")
download.file(url="https://curl.haxx.se/ca/cacert.pem", destfile="cacert.pem")
Run Code Online (Sandbox Code Playgroud)
关于RCurl,使用cacert.pem
上面下载的包,可能会出现错误:
library(RCurl)
getURL("https://www.google.com", cainfo = "cacert.pem")
# Error in function (type, msg, asError = TRUE) :
# SSL certificate problem: unable to get local issuer certificate
Run Code Online (Sandbox Code Playgroud)
在这种情况下,只需删除对证书包的引用即可解决问题:
getURL("https://www.google.com") # works
getURL("https://www.google.com", ssl.verifypeer=TRUE) # works
Run Code Online (Sandbox Code Playgroud)
ssl.verifypeer = TRUE
用于确保成功不是由于getURL()
压制安全性.该论点记录在RCurl FAQ中 …
ssl-certificate ×10
ssl ×6
curl ×3
java ×2
android ×1
c# ×1
https ×1
iis-7 ×1
iis-express ×1
linux ×1
openssl ×1
private-key ×1
r ×1
rcurl ×1
tomcat7 ×1
vcenter ×1
vmware ×1
windows-7 ×1
windows-8.1 ×1