Может ли WWW :: Механизировать возобновление предыдущей сессии SSL?

SSL-квитирование между моим скриптом и сервером происходит очень медленно. Чтобы сделать повторные соединения быстрее, мне хотелось бы, чтобы WWW :: Mechanize повторно использовал/возобновил предыдущий сеанс SSL. Это возможно?

Здесь exmample с помощью команды openssl для возобновления сеанса. Я бы хотел, чтобы WWW :: Mechanize выполнял что-то вроде этого.

Эта команда сохраняет параметры сеанса SSL для my_session.pem. Это SSL-соединение выполняется медленно.

openssl s_client -connect my.server:443 -sess_out my_session.pem

Эта команда использует my_session.pem для возобновления предыдущего сеанса. Это рукопожатие SSL выполняется быстро.

openssl s_client -connect my.server:443 -sess_in my_session.pem

1 ответ

WWW :: Mechanize основан на LWP :: UserAgent, который сам использует в своей текущей версии (начиная с версии 6) IO :: Socket :: SSL в качестве бэкэнда по умолчанию. IO :: Socket :: SSL поддерживает явное кеширование сеанса на стороне клиента с параметром SSL_session_cache_size, но по умолчанию кеширование сеанса не выполняется.

Вы должны иметь возможность включить его с чем-то вроде этого:

my $ua = WWW::Mechanize->new;
 $ua->ssl_opts( SSL_session_cache_size => 200 );

Обратите внимание, что это создает только кеш в памяти. Наличие постоянного кеша, который вы можете использовать между прогонами программы, в настоящее время не является встроенным, вам нужно создать что-то вроде этого по своему усмотрению и указать его с параметром SSL_session_cache. В вашей реализации вам нужно будет позаботиться о сериализации объектов SSL_SESSION прежде чем хранить их на диске, потому что в настоящее время они просто указывают на местоположение в памяти, которое является специфическим для текущего процесса.

licensed under cc by-sa 3.0 with attribution.