天道酬勤,学无止境

How does one install ssl certificates programatically (OpenSSL)

I have an application which I am working on for a client which in summary allows each of their clients to create their own own version of the application by customizing the templates and associate their own domain name (all the code is located on my clients server).

The problem I am faced with is that when such users create their own branded version with their own domain name and then want to login to their admin the system can't provide https authentication.

I am aware that one can create a self signed certificate and I "think" there is a fairly simple way of doing this programatically, BUT if I want to give users the ability to purchase their own CA signed certificate then how could this be accomplished?

I have spent a few hours trying to find the answer to this question online but can't seem to find a solution to this perplexing problem.

What I think I need is some simple code which allow the user to fill out the required form field which in turn creates the CSR file which in turn the user would provide to the CA to obtain his CA file and for which some code would need to allow the user to upload it... Which in turn would automatically install it and redraft the needed web services.

Any/all help and guidance would greatly be appreciated!

评论

How you would go about this depends on your architecture. But here are a couple things to consider:

  1. Most SSL configurations operate on a unique IP address. So that means each SSL certificate you add would require another IP address. You may be able to centralize that configuration if you use a load balancer for example. Whether or not you can do that programmatically depends on your load balancer.
  2. You will be best off generating the CSR based on your private key. Otherwise you will have to allow users to upload both a private key and certificate (and sometimes chain file).

Usually, dealing with the server certificate is done by a system administrator, so few tools will be user-friendly for people with no such knowledge.

You could create a PHP webpage that creates a private key and CSR (see openssl_csr_new examples) and lets the user copy the CSR in PEM format (and the private key for later use). Some CAs will let you paste such a CSR into their form, when requesting the certificate. Once the user gets the certificate (and perhaps the chain from the CA), they'd need to configure the server to use it (along with the private key). Tools like Webmin can let you do this from a web browser (you may want to implement something similar to what Webmin does for this, if you don't want to deploy a full web-based administration interface).

If the task of requesting the certificate is your client's responsibility (which it should really be if it's their server), they will need to be trained a little to know what to do, since the procedure will inevitably vary slightly depending on the CA they choose.

Needless to say that, if you implement scripts that can let the user change certificates and private keys, appropriate authentication and authorization should be used to perform these operations.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 不使用IIS的WCF服务上的证书(Certificate on a WCF service that does not use IIS)
    问题 我有一个WCF应用程序,该应用程序通常在IIS中运行(用于我的测试和生产环境)。 但是,当我从调试器运行它时,它被设置为运行自托管(即,控制台窗口弹出,并且不使用IIS)。 我还有一个客户端应用程序,可以连接到WCF应用程序。 通常,当我测试我的客户端应用程序(在Windows Mobile上运行)时,可以将其设置为连接到我的一个测试环境(我可以在其中开发环境进行测试)。 我现在遇到的问题是,客户端正在发送的内容与WCF应用程序正在获取的内容之间似乎存在脱节。 我需要调试WCF应用程序。 我可以运行WCF应用程序,然后更改客户端的URL以指向调试器版本,但是我的服务使用SSL运行,并且具有客户端经过硬编码所期望的证书。 我宁愿不禁用我那部分代码(在客户端上)。 有没有办法在自托管的WCF应用程序上安装证书? 回答1 我只想添加一些有关如何以编程方式为自托管WCF服务安装SSL证书的有用信息。 这不涉及如何使WCF应用程序使用SSL证书,因为在Web上的其他地方对此进行了详细记录。 它旨在由管理员在设置时运行,而不是由实际的应用程序本身运行,在此示例中,该应用程序在受限的Network Service帐户下运行。 该代码必须以管理员身份运行。 使用以编程方式授予命名空间保留中的示例以编程方式设置HTTP命名空间保留。 使用
  • Python 3.6.1的brew安装:[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(brew installation of Python 3.6.1: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed)
    问题 我使用安装了python 3.6 brew install python3 并尝试从https下载带有six.moves.urllib.request.urlretrieve的文件,但会引发错误 ssl.SSLError:[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:749) 在Python安装(来自.pkg)中,自述文件指示Install Certificates.command后需要运行Install Certificates.command 安装certifi 将认证路径符号链接到certify路径 才能使用证书。 但是,在brew install中,该文件不存在并且似乎没有运行。 回答1 似乎由于某种原因,Brew尚未运行Mac的Python3捆绑包中随附的Install Certificates.command 。 该问题的解决方案是在brew install python3之后运行以下脚本(从Install Certificates.command复制): # install_certifi.py # # sample script to install or update a set of default Root Certificates # for the ssl module. Uses the
  • Windows服务器下nginx配置https
    Windows服务器下nginx配置https 1.安装OpenSSL1.1 下载OpenSSL1.2安装OpenSSL1.3 配置环境变量 2.Nginx配置3.证书生成3.1 创建私钥3.2 创建csr证书3.3 去除密码3.4 生成crt证书 4 修改Nginx的nginx.conf配置文件5.验证6 https证书不安全解决6.1 创建openssl.cnf 1.安装OpenSSL 1.1 下载OpenSSL 先到http://slproweb.com/products/Win32OpenSSL.html 去下载OpenSSL(根据系统选择32位或者64位版本下载安装)。 1.2安装OpenSSL 将下载得文件copy到服务器上,然后双击该exe文件进行安装,安装路径建议自定义,第二次选择文件保存路径时不要默认,选择第二个,也就是和安装路径一致。最后点击finish关闭安装窗口 1.3 配置环境变量 变量名:OPENSSL_HOME 变量值:安装OpenSSL的根路径再加上bin。如D:\OpenSSL-Win64\bin; 并在Path变量结尾添加一条:%OPENSSL_HOME% 2.Nginx配置 在nginx安装的根目录新建ssl文件夹,用于保存openssl生成的证书。 3.证书生成 启动命令行,转至用于保存ssl证书的文件夹。 然后输入指令 3.1 创建私钥
  • Mavericks上python中的SSL证书验证失败(SSL certificate verification failure in python on Mavericks)
    问题 我陷入了持续的SSL验证问题。 SSL:CERTIFICATE_VERIFY_FAILED 我在构建让用户使用Mozilla Persona进行身份验证的Django应用程序时发现了错误。 (python3.4)> import requests (python3.4)> requests.get('https://verifier.login.persona.org') 我得到一个SSL: CERTIFICATE_VERIFY_FAILED从对urllib3 requests urllib3 ssl : ... "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/ssl.py", line 805, in do_handshake self._sslobj.do_handshake() ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598) ... "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests-2.4.1-py3.4.egg/requests
  • 如何列出受OpenSSL信任的证书?(How to list certificates, trusted by OpenSSL?)
    问题 据我了解,任何使用X.509证书的软件都可能有自己的基础来决定证书是否受信任。 AFAIK OpenSSL仅查询一个列表(例如/ etc / ssl / certs),并检查那里是否存在证书。 OpenSSL是否有办法列出它信任的所有证书? 我知道我可以自己查阅该文件(在我的特定OpenSSL安装上),但是是否有一种(独立于安装)从OpenSSL本身获取受信任列表的方法? 回答1 AFAIK OpenSSL仅查询一个列表(例如/ etc / ssl / certs),并检查那里是否存在证书。 不,默认情况下,OpenSSL不信任任何内容。 您必须指示它要信任什么。 甚至还有一个FAQ主题涉及它:为什么<SSL program>失败并显示证书验证错误?: 该问题通常由日志消息指出,例如“无法获取本地发行者证书”或“自签名证书”。 验证证书后,OpenSSL必须“信任”其根CA,这通常意味着必须将CA证书放置在目录或文件中,并将相关程序配置为读取该证书。 OpenSSL程序“验证”的行为类似,并发出类似的错误消息:有关更多信息,请参见verify(1)程序手册页。 您还可以测试与Google的连接,以了解OpenSSL的行为: $ openssl s_client -connect google.com:443 CONNECTED(00000003) depth=2 C = US
  • 已在证书存储区中安装SSL证书,但不在IIS证书列表中(Installed SSL certificate in certificate store, but it's not in IIS certificate list)
    问题 将通配符SSL证书安装到证书存储中后,该证书不会出现在IIS证书列表中以用于站点绑定。 证书已正确安装,但证书中显然没有密钥。 您如何在不发出新请求或与他人联系以获取密钥的情况下解决此问题(例如,如果是发布前一天?;-)) 回答1 我今天遇到了这个问题。 由于时间限制和其他一些问题,无法从提供商那里获取密钥。 我在这里找到了以下解决方案(在pixelloa的评论下),并认为最好在Stack Overflow上也有答案。 如果证书没有私钥,则可以通过以下操作解决此问题: 要解决此问题,请使用MMC管理单元将证书导入到计算机帐户的PERSONAL存储中,单击它,然后抓住序列号行。 转到dos,运行certutil -repairstore my "paste the serial # in here" (除非在序列号中删除空格,否则需要引号),然后用个人证书刷新MMC,右键单击-导出-选择“删除私有”以外的所有内容KEY,按确定。 然后转到IIS和IMPORT证书,而不是完成请求。 对于它的价值,我实际上要做的就是运行certutil -repairstore命令,并且我的证书有效。 我确实运行了导出并为导出本身设置了密码,但是不必重新导入证书。 现在,该证书显示在IIS的证书列表中,并可用于HTTPS绑定。 我希望这对某人有所帮助。 回答2 由于上述答案的启发
  • 已在证书存储区中安装SSL证书,但不在IIS证书列表中(Installed SSL certificate in certificate store, but it's not in IIS certificate list)
    问题 将通配符SSL证书安装到证书存储中后,该证书不会出现在IIS证书列表中以用于站点绑定。 证书已正确安装,但证书中显然没有密钥。 您如何在不发出新请求或与他人联系以获取密钥的情况下解决此问题(例如,如果是发布前一天?;-)) 回答1 我今天遇到了这个问题。 由于时间限制和其他一些问题,无法从提供商那里获取密钥。 我在这里找到了以下解决方案(在pixelloa的评论下),并认为最好在Stack Overflow上也有答案。 如果证书没有私钥,则可以通过以下操作解决此问题: 要解决此问题,请使用MMC管理单元将证书导入到计算机帐户的PERSONAL存储中,单击它,然后抓住序列号行。 转到dos,运行certutil -repairstore my "paste the serial # in here" (除非在序列号中删除空格,否则需要引号),然后用个人证书刷新MMC,右键单击-导出-选择“删除私有”以外的所有内容KEY,按确定。 然后转到IIS和IMPORT证书,而不是完成请求。 对于它的价值,我实际上要做的就是运行certutil -repairstore命令,并且我的证书有效。 我确实运行了导出并为导出本身设置了密码,但是不必重新导入证书。 现在,该证书显示在IIS的证书列表中,并可用于HTTPS绑定。 我希望这对某人有所帮助。 回答2 由于上述答案的启发
  • 绑定到端口时,SSL证书添加失败(SSL Certificate add failed when binding to port)
    问题 我使用WCF创建了一个WebService。 我正在做自我托管,我想启用HTTPS。 根据我的理解,我需要创建一个证书并绑定到我要使用的端口。 这是我为处理此问题而执行的步骤: 在我的本地计算机上创建了一个证书,以充当根证书颁发机构 makecert -n“ CN =我的根证书颁发机构” -r -sv RootCATest.pvk RootCATest.cer 打开MMC.exe并将保存的.cer文件导入“受信任的根证书\ Certificates \”文件夹 makecert -sk MyKeyName -iv RootCATest.pvk -n“ CN = MyMachineName” -ic RootCATest.cer -sr localmachine -ss my -sky exchange -pe MyMachineName.cer 从签署的根证书颁发机构创建临时服务证书 makecert -sk MyKeyName -iv RootCATest.pvk -n“ CN = MyMachineName” -ic RootCATest.cer -sr localmachine -ss my -sky exchange -pe MyMachineName.cer 试图将证书绑定到端口号(在这种情况下为443) netsh http add sslcert ipport
  • Omniauth Facebook错误-Faraday :: Error :: ConnectionFailed(Omniauth Facebook Error - Faraday::Error::ConnectionFailed)
    问题 (仅供参考:我正在跟踪来自Railscast#241的Twitter Omniauth。我成功使用了Twitter,现在转到Facebook) 我使用Omniauth登录Facebook后,立即收到以下错误消息: Faraday::Error::ConnectionFailed SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed 这是什么意思? 这是我的代码 Rails.application.config.middleware.use OmniAuth::Builder do provider :facebook, '<key from fb>', '<another key from fb>' end 实际上,我的代码中没有什么东西,我所拥有的只是我想使用to_yaml来查看request.env中内容的sessionController。 class SessionsController < ApplicationController def create raise request.env["omniauth.auth"].to_yaml end end 我该如何解决法拉第错误? 回答1
  • 如何创建自签名 SSL 证书以在测试 Web 应用程序时使用(How do I create a self signed SSL certificate to use while testing a web app)
    问题 如何为 Apache 服务器创建自签名 SSL 证书以在测试 Web 应用程序时使用? 回答1 如何创建用于测试目的的自签名 SSL 证书? 来自 http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#selfcert: 确保已安装 OpenSSL 并在您的 PATH 中。 运行以下命令,以创建 server.key 和 server.crt 文件: openssl req -new -x509 -nodes -out server.crt -keyout server.key 这些可以在您的 httpd.conf 文件中按如下方式使用: SSLCertificateFile /path/to/this/server.crt SSLCertificateKeyFile /path/to/this/server.key 请务必注意此 server.key 没有任何密码短语。 要将密码短语添加到密钥,您应该运行以下命令,并根据要求输入并验证密码短语。 openssl rsa -des3 -in server.key -out server.key.new mv server.key.new server.key 请在安全位置备份 server.key 文件和您输入的密码。 回答2 存在可以生成 SSL 的各种工具。 以 OpenSSL
  • Centos7/8搭建https服务器(SSL域名证书的申请和部署--Apache及Nginx实现HTTPS)
    一、HTTP简介 从2018年7月1日开始,Chrome将显示所有未使用SSL证书的网站标记为“不安全”,而拥有SSL证书的网站的权重排名都会获得提升。 随着企业与网民网络安全意识的增加,全网正在走向全面https的时代,加密将无处不在,无论是网站、APP、软件、小程序等都在大规模应用SSL进行加密。 但Web服务器在默认情况下使用HTTP,这是一个纯文本的协议。正如其名称所暗示的,纯文本协议不会对传输中的数据进行任何形式的加密。而基于HTTP的Web服务器是非常容易配置,它在安全方面有重大缺陷。任何”中间人”,通过精心防止的数据包嗅探器,是能够看到任何经过的数据包内容。更进一步,恶意用户甚至可以在传输路径设置一个假冒的WEB服务器冒名顶替实际的目标Web服务器。在这种情况下,最终用户可能实际上与假冒者服务器,而不是真正的目的服务器进行通信。这样,恶意用户可以通过精心设计的表单欺骗终端用户获取到敏感信息,如用户名密码。 为了处理这些类型的漏洞,大多数供应商往往在他们的web服务器应用HTTPS协议。对于只读类型的网站,用户只能读取内容,并没有实际提交任何信息,HTTP仍然是一个可行的选择。但是,对于保存敏感信息的网站,比如:用户需要登录来获得网站的服务,那么HTTPS是必须的。 HTTPS能够为一个网站提供以下能力。 1、确保所有经过服务器传输的数据包都是经过加密的。 2
  • Nginx配置SSL证书-双向认证(HTTP转HTTPS)
    1.生成双向证书(server服务端,ca客户端)1.1.openss生成所需证书::==================生成服务器私钥================== openssl genrsa -out server.key -passout pass:Abc123 2048 ::生成服务器证书请求文件: openssl req -new -key server.key -passin pass:Abc123 -out server.csr -subj "/CN=*.test.com/OU=xx Club/O=dy/L=nb/ST=Beijing/C=CN" ::==================生成服务器公钥证书(单向认证时使用)================== openssl x509 -req -in server.csr -out server.crt -signkey server.key -days 3650::==================生成CA私钥================== openssl genrsa -out ca.key -passout pass:123456 2048 ::生成CA公钥证书及CA私钥转换p12(浏览器需要安装此证书,否则无法访问服务) openssl req -new -x509 -key ca.key
  • openssl校验SSL证书public key是否配对
    今天遇到一个很少遇到的关于SSL证书申请、安装问题,简要记录下来。背景:SSL证书是private key + public key一起工作才能完成加密过程的。大致来说就是client在handshake过程中先拿public key加密发送随机session encryption key set以及其它关键信息,通过public key密码的报文只能通过server端安装的SSL certificate key pair中的private key才能进行解密。如果private key与public key不匹配,那么首先是server端在安装的时候就会提示密钥对不匹配并拒绝安装;其次,即便server允许安装不正确的证书对,那么在实际运行中,因为server无法解密client发送的加密报文,也会造成SSL handshake过程失败,进而导致session无法继续。But, 证书购买过程会涉及到域名验证等等操作,可能在有的公司里面不会将此操作交由工程师完成,故作为运维人员的们即便明白SSL如何工作与申请、部署等等,也有可能等领导购买并生成SSL证书对。那么拿到证书对的时候,应该如何验证private key与public key是不是一对的呢?可以通过openssl工具public key信息提取然后进行精准的对比,命令如下1). 针对private key(以rsa为例
  • 使用自定义的openssl版本编译python时的Coredump(Coredump when compiling python with a custom openssl version)
    问题 当使用本地openssl-1.0.1f共享安装编译python-3.4.0rc3时, make打印没有错误,但随后在make install或make test上得到以下核心转储: Program terminated with signal 11, Segmentation fault. (gdb) bt #0 0x00007f131dd10510 in EVP_PKEY_CTX_dup () from /data2/soft/openssl/lib/libcrypto.so.1.0.0 #1 0x00007f131dd0284f in EVP_MD_CTX_copy_ex () from /data2/soft/openssl/lib/libcrypto.so.1.0.0 #2 0x00007f131e256ab5 in EVPnew (name_obj=0x7f131e46a500, digest=0x0, initial_ctx=0x7f131e459a40, cp=0x0, len=0) at /data2/soft/python3/Python-3.4.0rc3/Modules/_hashopenssl.c:410 #3 0x00007f131e25726e in EVP_new_md5 (self=<value optimized out>, args=
  • 无效的自签名SSL证书-“缺少主题备用名称”(Invalid self signed SSL cert - “Subject Alternative Name Missing”)
    问题 最近,Chrome浏览器已停止使用我的自签名SSL证书,并认为它们不安全。 当我在DevTools | Security查看证书时DevTools | Security DevTools | Security标签,我可以看到它说 缺少主题备用名称此站点的证书不包含主题备用名称扩展名,该扩展名包含域名或IP地址。 证书错误站点的证书链(net :: ERR_CERT_COMMON_NAME_INVALID)出现问题。 我怎样才能解决这个问题? 回答1 要解决此问题,基本上,在创建证书时,需要向openssl提供一个额外的参数 -sha256 -extfile v3.ext 其中v3.ext是这样的文件,其中%%DOMAIN%%替换为您与Common Name相同的Common Name 。 这里和这里的更多信息。 请注意,通常您会将Common Name和%%DOMAIN%%设置为您要为其生成证书的域。 因此,如果它是www.mysupersite.com ,那么您将同时使用它们。 v3.ext authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
  • 如何使Python使用Mac OS TrustStore中的CA证书?(How to make Python use CA certificates from Mac OS TrustStore?)
    问题 我需要在公司Intranet上使用Curtom根证书,并将其加载到Mac OS TrustStore(KeyChain)中,才能解决所有浏览器和GUI应用程序的问题。 似乎它甚至可以与Mac OS X附带的curl版本一起使用,但不适用于python ,甚至不适用于Mac OS 10.12 Sierra(Python 2.7.10)附带的curl版本。 不过,似乎我会受到: urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)> 我该如何解决? 因为我在很多Python工具中都遇到了这个问题,所以如果能找到一种无需修补补丁就可以避免的方法,我将不胜感激。 我自己不能提供自定义CA证书,因为我无法修补使用的数十个Python工具。 大多数工具都在使用requests库,但是有一些工具直接在Python中使用本机ssl支持。 回答1 在MacOS Sierrra的Python 3.6中,这也是一个问题。 我知道您的用例是不同的。 但是我在调​​查这个问题时偶然发现了这个线程。 因此,如果有人也有这篇文章值得一看: http://www.cdotson.com/2017/01/sslerror-with-python-3-6-x
  • SSL_connect 返回=1 errno=0 state=SSLv3 读取服务器证书B:证书验证失败(SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed)
    问题 我正在使用 Authlogic-Connect 进行第三方登录。 运行适当的迁移后,Twitter/Google/yahoo 登录似乎工作正常,但 facebook 登录引发异常: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed 开发日志显示 OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed): app/controllers/users_controller.rb:37:in `update' 请提出建议。 回答1 尝试将JQuery生成器用于Rails 3时遇到了类似的问题 我这样解决了: 获取CURL证书颁发机构(CA)捆绑包。 您可以使用以下方法执行此操作: sudo port install curl-ca-bundle [如果使用MacPorts] 或直接将其拉下wget http://curl.haxx.se/ca/cacert.pem 执行试图验证SSL认证的红宝石代码: SSL_CERT_FILE=/opt/local/etc
  • 搭建Apache服务器
    3.6.1. HTTP协议介绍 HTTP协议即超文本传输协议,该协议定义了浏览器如何向www服务器请求web网页,以及服务器如何将web网页传送给浏览器,定义了主机和服务器之间如何通信;HTTP协议本身通过明文的方式传输数据,默认端口TCP/80端口;由于协议传输数据是明文传输的,于是就有了HTTPS,端口TCP/443,HTTPS=HTTP+SSL/TLS(非对称加密) HTTP的报文结构,在这主要讲请求报文和回应报文 请求行由请求方法字段、URL字段和HTTP协议版本字段,组成,它们用空格分隔,例如:GET /index.html HTTP/1.1;HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。最常用的是GET和POST; GET:GET方法要求服务器将URL(http://www.sina.com.cn/)定位的资源放在响应报文的数据部分,再回送给client。 POST:POST方法将请求参数封装在HTTP请求数据中,以key/value的形式出现,可以传递大量数据,可用来传递文件 URL:统一资源定位符,即请求的资源路径 协议版本:HTTP协议版本有两种,HTTP1.0/HTTP1.1;HTTP1.0对于每个连接都只能传送一个请求和响应,请求就会关闭,HTTP1.0没有Host字段;而HTTP1
  • Worklight 开发是否需要签名的 SSL 证书?(Is a signed SSL certificate required for Worklight development?)
    问题 我正在使用 Worklight 6.0 版进行演示,我需要在其中使用 SSL 从 iOS 和 Android 到 Worklight Server。 有没有办法在 Worklight 服务器中使用自签名或测试证书? 或者我是否需要从标准 CA 之一购买证书,即使是为了测试/演示? 我已经看到有关如何在 Android 系统信任存储中导入我的证书的参考资料,这看起来很有希望,但我没有看到任何与 iOS 等效的内容。 有许多本机代码解决方法(完全禁用 SSL 证书验证)以及关于哪种解决方案有效/无效的大量讨论(并且没有讨论我能找到的 iOS 7 上仍然有效的方法)。 将证书导入 Android 系统信任库是最好的开发方法吗? 是否有一个简单的 iOS 解决方案,允许自签名或测试证书不完全禁用证书检查? 回答1 好的。 我没有找到通用答案或接受特定证书的方法,但在 iOS 和 Android 上,可以禁用客户端证书验证以进行开发和测试。 在 Android 中,默认 Manifest已配置为忽略证书验证。 默认情况下,AndroidManifest.xml 中的 Application 元素有一个属性: android:debuggable="true" 使用此设置,客户端不会验证服务器提供的 SSL 证书。 因此,在 Android 上,自签名证书仅在默认情况下有效。
  • OpenSSL:错误“证书链中的自签名证书”(Openssl : error “self signed certificate in certificate chain”)
    问题 当我使用openssl API验证服务器证书(自签名)时,出现以下错误: 错误19深度1查找:证书链中的自签名证书 根据openssl文档,此错误(19)是 “ X509_V_ERR_SELED_CERT_IN_CHAIN:证书链中的自签名证书-可以使用不受信任的证书建立证书链,但在本地找不到根。” 为什么会出现此错误? 我的服务器证书有任何问题吗? 回答1 您有一个自签名证书,因此默认情况下它是不受信任的,这就是OpenSSL抱怨的原因。 该警告实际上是一件好事,因为这种情况还可能由于中间人攻击而上升。 要解决此问题,您需要将其安装为受信任的服务器。 如果它是由不受信任的CA签名的,则还必须安装该CA的证书。 看一下有关安装自签名证书的链接。 回答2 这是验证证书链的一种方法: openssl verify -verbose -x509_strict -CAfile ca.pem cert_chain.pem 这不需要在任何地方安装CA。 请参阅SSL证书链捆绑包如何工作? 有关详细信息。 回答3 如果您正在运行Charles并尝试构建docker容器,则很可能会遇到此错误。 确保在proxy -> macOS proxy下禁用Charles(macos) proxy -> macOS proxy 查尔斯是 HTTP代理/ HTTP监视器/反向代理