news 2026/9/14 12:35:56

Android Raspberry 请求 api 失败 iOS 请求成功【ssl 证书配置问题】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android Raspberry 请求 api 失败 iOS 请求成功【ssl 证书配置问题】

好几个月之前,我用 node.js 部署了一个 api,然后用树莓派python调用竟然失败了,没找到原因,就搁置了


最近写 React Native 项目
同一个 api https://hongweizhu.com:3000/x_mood
Android 模拟器和真机请求失败
iOS 及模拟器请求成功
Postman 请求成功
Raspberry 请求失败(但是跳过 SSL 证书验证可以请求成功,用的阿里云申请的免费证书)


importrequests url='https://hongweizhu.com:3000/x_mood'# 根据实际情况构造请求体,这里是一个示例payload={'title':'今日心情','mood':'开心','content':'今天阳光明媚,心情很好。',}# 如果需要身份验证或 token,可以在 headers 中添加headers={'Content-Type':'application/json',# 'Authorization': 'Bearer YOUR_TOKEN_HERE', # 如有需要}# 添加 verify=False 来跳过 SSL 证书验证response=requests.post(url,json=payload,headers=headers,verify=False)# 打印响应内容print(f'Status code:{response.status_code}')try:print('Response:',response.json())exceptExceptionase:print('Response text:',response.text)print('Error parsing JSON:',e)
pi@raspberrypi:~/test $sudopython3 test_api.py Traceback(most recent call last): File"/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line705,inurlopen httplib_response=self._make_request(^^^^^^^^^^^^^^^^^^^ File"/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line388,in_make_request self._validate_conn(conn)File"/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line1050,in_validate_conn conn.connect()File"/usr/lib/python3/dist-packages/urllib3/connection.py", line414,inconnect self.sock=ssl_wrap_socket(^^^^^^^^^^^^^^^^ File"/usr/lib/python3/dist-packages/urllib3/util/ssl_.py", line449,inssl_wrap_socket ssl_sock=_ssl_wrap_socket_impl(^^^^^^^^^^^^^^^^^^^^^^ File"/usr/lib/python3/dist-packages/urllib3/util/ssl_.py", line493,in_ssl_wrap_socket_implreturnssl_context.wrap_socket(sock,server_hostname=server_hostname)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File"/usr/lib/python3.11/ssl.py", line517,inwrap_socketreturnself.sslsocket_class._create(^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File"/usr/lib/python3.11/ssl.py", line1108,in_create self.do_handshake()File"/usr/lib/python3.11/ssl.py", line1379,indo_handshake self._sslobj.do_handshake()ssl.SSLCertVerificationError:[SSL: CERTIFICATE_VERIFY_FAILED]certificate verify failed: unable to getlocalissuer certificate(_ssl.c:992)During handling of the above exception, another exception occurred: Traceback(most recent call last): File"/usr/lib/python3/dist-packages/requests/adapters.py", line489,insend resp=conn.urlopen(^^^^^^^^^^^^^ File"/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line789,inurlopen retries=retries.increment(^^^^^^^^^^^^^^^^^^ File"/usr/lib/python3/dist-packages/urllib3/util/retry.py", line594,inincrement raise MaxRetryError(_pool, url, error or ResponseError(cause))urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='hongweizhu.com',port=3000): Max retries exceeded with url: /x_mooood_note(Caused by SSLError(SSLCertVerificationError(1,'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:992)')))During handling of the above exception, another exception occurred: Traceback(most recent call last): File"/home/pi/test/test_api.py", line19,in<module>response=requests.post(url,json=payload,headers=headers,verify=True)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File"/usr/lib/python3/dist-packages/requests/api.py", line115,inpostreturnrequest("post", url,data=data,json=json, **kwargs)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File"/usr/lib/python3/dist-packages/requests/api.py", line59,inrequestreturnsession.request(method=method,url=url, **kwargs)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File"/usr/lib/python3/dist-packages/requests/sessions.py", line587,inrequest resp=self.send(prep, **send_kwargs)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File"/usr/lib/python3/dist-packages/requests/sessions.py", line701,insend r=adapter.send(request, **kwargs)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File"/usr/lib/python3/dist-packages/requests/adapters.py", line563,insend raise SSLError(e,request=request)requests.exceptions.SSLError: HTTPSConnectionPool(host='hongweizhu.com',port=3000): Max retries exceeded with url: /x_mooood_note(Caused by SSLError(SSLCertVerificationError(1,'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:992)')))pi@raspberrypi:~/test $

然后把 apche 配置 ssl 的部分发给 AI

# SSL Engine Switch:# Enable/Disable SSL for this virtual host.SSLEngine on# A self-signed (snakeoil) certificate can be created by installing# the ssl-cert package. See# /usr/share/doc/apache2/README.Debian.gz for more info.# If both key and certificate are stored in the same file, only the# SSLCertificateFile directive is needed.# SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem# SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.keySSLCertificateFile /etc/apache2/ssl/hongweizhu.com_public.crt SSLCertificateKeyFile /etc/apache2/ssl/hongweizhu.com.key

没有设置中间证书链(SSLCertificateChainFile)


没有配置chain.crt哈哈哈哈哈
以前我想过,怎么申请的证书解压后有 3 个文件
apache示例代码只给了两个,之前就配置了两条,web 浏览器,iOS 用没问题,就没管第三个文件


https://www.ssllabs.com/index.html


直到现在树莓派请求失败,android 请求失败。。。。。。

就这样吧,哈哈哈哈哈


希望对你有些帮助。
有错误或者疑问留言。
我的个人网站点击访问 hongweizhu.com。

END

推荐一下我写的的 App 熊猫小账本,里面有用到这篇博客讲的内容

熊猫小账本一个简洁的记账 App,用于记录日常消费开支收入,使用 iCloud 保存同步数据。

点击了解更多详情 👀

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 12:29:20

font-awesome图标字体加载失败排查与构建优化:从woff2 404到性能压降

简介&#xff1a;开发工具 Font Awesome 压缩版样式文件&#xff0c;是面向 Web 前端开发者的图标字体工具资源&#xff0c;适用于需要在网页中快速加载矢量图标、减少图片请求的个人站点、企业官网或后台管理系统等场景。文件采用单一 CSS 格式&#xff0c;整个资源包仅含 1 个…

作者头像 李华
网站建设 2026/9/14 12:28:10

智能体评测系统架构与工程化落地实践

1. 项目概述&#xff1a;这不是一个“跑个benchmark”的玩具系统“智能体评测系统架构与工程化落地”——光看标题&#xff0c;很多人第一反应是&#xff1a;又一个论文里的评估框架&#xff1f;配几个指标图&#xff0c;跑几组LLM在HotpotQA或ToolAlpaca上的准确率&#xff0c…

作者头像 李华
网站建设 2026/9/14 12:26:43

大语言模型函数调用:从理论到实践的AI进化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 12:25:26

力扣 LeetCode 51. N皇后(Day14:回溯算法)

解题思路&#xff1a;每次进入backtracking都表示进入下一行每个backtracking中处理当前行的各个列&#xff0c;看各列是否合法isValid中因为是一行一行向下遍历的&#xff0c;所以对应的当前行一定满足条件&#xff0c;没有放置过其他皇后&#xff0c;只需要看对应的列是否满足…

作者头像 李华
网站建设 2026/9/14 12:25:11

力扣 LeetCode 17. 电话号码的字母组合(Day12:回溯算法)

解题思路&#xff1a;需要构想好回溯树的宽度和深度分别代表什么含义宽度&#xff1a;abc或其他数字对应的字母排列&#xff08;for循环使用&#xff09;深度&#xff1a;digits的长度&#xff08;递归深度使用&#xff0c;index 1&#xff09;注意&#xff1a;终止条件是if (…

作者头像 李华