ssl SIM800L GSM模块与http一起工作,但与https一起显示错误,为什么?

c3frrgcw  于 2022-11-30  发布在  其他
关注(0)|答案(2)|浏览(179)

我正在尝试使用Arduino和sim800l GSM模块将一些传感器数据发送到MySQL数据库。当我使用HTTP作为URL并从我的网站中删除SSL证书时,它工作得很好。但是当我在我的网站上启用SSL证书时,它在串行监视器中显示HTTP响应代码606。以下是我在没有SSL证书的情况下的工作代码(此代码工作得很好)

#include <SoftwareSerial.h>
SoftwareSerial gprsSerial(3, 2);

void setup()
{
  gprsSerial.begin(19200);
  Serial.begin(19200);

  Serial.println("Config SIM900...");
  delay(2000);
  Serial.println("Done!...");
  gprsSerial.flush();
  Serial.flush();

  // attach or detach from GPRS service 
  gprsSerial.println("AT+CGATT?");
  delay(100);
  toSerial();

  // bearer settings
  gprsSerial.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");
  delay(2000);
  toSerial();

  // bearer settings
  gprsSerial.println("AT+SAPBR=3,1,\"APN\",\"myapn\"");
  delay(2000);
  toSerial();

  // bearer settings
   gprsSerial.println("AT+SAPBR=0,1");
   delay(2000);
  gprsSerial.println("AT+SAPBR=1,1");
  delay(2000);
  toSerial();
}

void loop()
{
   // initialize http service
   gprsSerial.println("AT+HTTPINIT");
   delay(2000); 
   toSerial();

   // set http param value
   gprsSerial.println("AT+HTTPPARA=\"URL\",\"http://www.website123456.com/data/index.php?data1=2.88&data2=2.93\""); 
   delay(20000);
   toSerial();

   // set http action type 0 = GET, 1 = POST, 2 = HEAD
   gprsSerial.println("AT+HTTPACTION=0");
   delay(6000);
   toSerial();

   // read server response
   gprsSerial.println("AT+HTTPREAD"); 
   delay(10000);
   toSerial();

   gprsSerial.println("");
   gprsSerial.println("AT+HTTPTERM");
   toSerial();
   delay(300);

   gprsSerial.println("");
   delay(10000);
}

void toSerial()
{
  while(gprsSerial.available()!=0)
  {
    Serial.write(gprsSerial.read());
  }
}

下面是我将URL替换为https并启用我的网站ssl时的输出。(如您所见,它显示http响应代码606“不可接受。用户代理已成功联系,但会话描述的某些方面(如请求的媒体、带宽或寻址方式)不可接受。”

23:16:48.974 -> Config SIM800L...
23:16:50.946 -> Done!...
23:16:51.079 -> AT+CGATT?

23:16:51.079 -> +CGATT: 1
23:16:51.079 -> 
23:16:51.079 -> OK
23:16:53.107 -> AT+SAPBR=3,1,"CONTYPE","GPRS"

23:16:53.107 -> OK
23:16:55.100 -> AT+SAPBR=3,1,"APN","dialogbb"

23:16:55.133 -> OK
23:16:59.122 -> AT+SAPBR=0,1

23:16:59.155 -> OK
23:16:59.155 -> AT+SAPBR=1,1

23:17:01.151 -> OK
23:17:03.185 -> AT+HTTPPARA="URL","https://www.mywebsitttte.com/index.php?dAT+HTTPSSL=1

23:17:08.207 -> OK
23:17:14.221 -> AT+HTTPACTION=0

23:17:14.255 -> OK
23:17:14.255 -> 
23:17:14.255 -> +HTTPACTION: 0,606,0
23:17:24.266 -> AT+HTTPREAD

23:17:24.266 -> OK
23:17:36.595 -> 
AT+HTTPTERM

23:17:36.595 -> OK

那么,我应该做什么修改这个代码,能够上传数据到网站与SSL证书?我见过的人说,我需要进入SSL模式使用这个代码AT+HTTPSSL=1我应该把这个代码。谢谢

6ss1mwsb

6ss1mwsb1#

我终于弄明白了,这是因为这个sim800只支持TLS 1.0.但是它是一个过时的版本,许多网站和主机服务已经禁用了它.你可以从这里检查你的服务器SSL版本cdn77.com/tls-test

62lalag4

62lalag42#

首先检查您的SIM800固件,我的808模块上有旧固件,没有SSL,我几周前才买的。您可以使用此AT命令进行检查:

AT+HTTPSSL=?

如果你得到错误,然后检查并更新固件。否则,如果工作,这是我使用的顺序:

client.println("AT+HTTPINIT");
 getresponse();
 delay(1000);
 client.println("AT+HTTPSSL=1");    // set SSL for HTTPS
 getresponse();
 delay(1000);
 client.println("AT+HTTPPARA=\"CID\",1");
 getresponse();
 delay(1000);

我可以可靠地通过HTTPS连接到Firebase数据库。

相关问题